Sql server 存储过程中参数的表名
我正在尝试创建一个存储过程。以下是我的代码的简短版本:Sql server 存储过程中参数的表名,sql-server,stored-procedures,Sql Server,Stored Procedures,我正在尝试创建一个存储过程。以下是我的代码的简短版本: CREATE PROCEDURE foobar @table_name nvarchar(20), @Work_Status nvarchar(20) AS BEGIN update @table_name -- /// How Do I do this? /// set work_status = @Work_Status END 如何通过参数定义表名?尝试使用动态查询: DECLARE @SQL
CREATE PROCEDURE foobar
@table_name nvarchar(20),
@Work_Status nvarchar(20)
AS
BEGIN
update @table_name -- /// How Do I do this? ///
set work_status = @Work_Status
END
如何通过参数定义表名?尝试使用动态查询:
DECLARE @SQL NVARCHAR(4000)
DECLARE @ParamDefinition nvarchar(500)
SET @ParamDefinition = N'@Work_Status nvarchar(20), @day_no nvarchar(10), @day_month nvarchar(10), @day_years nvarchar(10)';
--...CURSOR declaration
--... BEGIN
SELECT @SQL =
N'update [SKTH_ENSUSER].[dbo].' + @tbl_name + '
set t_work_status = @Work_Status
where t_day_no = @day_no and t_month_no = @day_month and t_year_no = @day_years'
EXECUTE sp_executesql @SQL, @ParamDefinition, @Work_Status = @Work_Status, @day_no = @day_no, @day_month = @day_month, @day_years = @day_years
--...
-- FETCH NEXT FROM ENS_cursor
更新:@SQL必须是NVARCHAR所有这些代码都是证明您的问题所必需的吗?不,不是。使用用户定义的表类型将值作为参数传递到存储的进程欢迎使用堆栈溢出!我改变了你的头衔,使之更符合你的要求(希望如此)。我还简化了代码示例,只显示了相关部分。这种做法是在发布问题之前解决问题的好方法。当你简化时,更容易看到一些错误。话虽如此,如果你看到了某种错误,请将其添加到你的帖子中。此外,如果我的编辑没有正确显示您的问题,请编辑以确保其正确。德国劳埃德船级社;HFProcedure sp_executesql,第1行[批处理起始行0]过程需要类型为“ntext/nchar/nvarchar”的参数“@statement”。