table 服务器中查询中的动态 table 名称和变量名称
Dynamic table name and variable name in query in SQL Server
我正在尝试使用动态 table 名称和日期从 Python 运行 进行查询。在此过程中,我在 SSMS 中尝试了以下查询,但它产生了一条错误消息。如何为 table 名称和日期使用变量,并使查询正常工作?
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')
我收到以下错误消息:
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '10'
使用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;
我正在尝试使用动态 table 名称和日期从 Python 运行 进行查询。在此过程中,我在 SSMS 中尝试了以下查询,但它产生了一条错误消息。如何为 table 名称和日期使用变量,并使查询正常工作?
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')
我收到以下错误消息:
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '10'
使用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;