【发布时间】:2018-08-10 10:38:49
【问题描述】:
我正在尝试使用动态表名和日期从 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')
我收到以下错误消息:
消息 102,第 15 级,状态 1,第 3 行
'10' 附近的语法不正确
【问题讨论】:
-
UPDATE后面少了一个空格。 -
除了许多其他缺陷之外,这很明显来自这里:
valid_to = '+ @valid_to +'。您的@valid_to被声明为datetime,并且不能成为+字符串连接的一部分。但是CAST不能解决这个问题(日期格式、引号......)正确的解决方案来自 Gordon:使用参数并使用QUOTENAME()! (或meet bobby tables)
标签: sql sql-server tsql dynamicquery