表名称来自存储过程中的参数

时间:2017-04-24 10:22:00

标签: 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

如何通过参数定义表名?

1 个答案:

答案 0 :(得分:0)

尝试使用动态查询:

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