SQL Server查询中的动态表名和变量名

时间:2018-08-10 10:38:50

标签: sql sql-server tsql dynamicquery

我正在尝试使用动态表名称和日期从Python运行查询。在此过程中,我已尝试在SSMS中执行以下查询,但会生成错误消息。如何使用变量作为表名和日期,并使查询正常工作?

DECLARE @table_name VARCHAR(50)='table_name';
DECLARE @valid_to datetime = getdate();

EXEC('UPDATE '+ @table_name + '
SET valid_flag = 0, 
valid_to = '+ @valid_to +'
where valid_flag=1')

我收到以下错误消息:

  

第15级状态1行3的消息102
  '10'附近的语法不正确

1 个答案:

答案 0 :(得分:2)

使用sp_executesql和参数:

DECLARE @table_name VARCHAR(50) = 'table_name';
DECLARE @valid_to datetime = getdate();

DECLARE @sql NVARCHAR(max) = N'
UPDATE '+ @table_name + N'
    SET valid_flag = 0, 
        valid_to = @valid_to
    WHERE valid_flag = 1
';

EXEC sp_executesql @sql, N'@valid_to datetime', @valid_to=@valid_to;

编辑:

如Larnu所建议,评论:

DECLARE @table_name sysname = 'table_name';
DECLARE @valid_to datetime = getdate();

DECLARE @sql NVARCHAR(max) = N'
UPDATE '+ QUOTENAME(@table_name) + N'
    SET valid_flag = 0, 
        valid_to = @valid_to
    WHERE valid_flag = 1
';

EXEC sp_executesql @sql, N'@valid_to datetime', @valid_to=@valid_to;