我有一个名为
Applications
的表,它有一个名为
StatusChangeDate
的列,它的类型是
datetime
。我试图使用一个动态查询来更新
StatusChangeDate
。
我最初的疑问如下。
DECLARE @TableName NVARCHAR(MAX) = (SELECT TOP 1 name FROM sys.Tables WHERE Name LIKE '%AuthorizedUsers_%');
DECLARE @UTCDate DATETIME = GETUTCDATE();
DECLARE @ApplicationsTableUpdateQuery NVARCHAR(100) = '
UPDATE A
SET StatusChangeDate = ' + @UTCDate + '
FROM [MyDb_1].[dbo].[Applications] A
INNER JOIN [MyDb_2].[dbo].[' + @TableName +'] A2
ON A.ApplicationId = A2.ApplicationId
EXEC sp_executesql @ApplicationsTableUpdateQuery
这给了我以下错误。"从字符串转换日期和/或时间时,转换失败"。
在我做了一些研究之后,我发现我需要将@UTCDate
变量转换为VARCHAR,我更新的查询如下。
DECLARE @ApplicationsTableUpdateQuery NVARCHAR(100) = '
UPDATE A
SET StatusChangeDate = ' + CONVERT(VARCHAR(100), @UTCDate) + '
FROM [MyDb_1].[dbo].[Applications] A
INNER JOIN [MyDb_2].[dbo].[' + @TableName +'] A2
ON A.ApplicationId = A2.ApplicationId
EXEC sp_executesql @ApplicationsTableUpdateQuery
但这给了我一个语法错误,说。Incorrect syntax near '19'
",我想这是@UTCDate的格式,因为今天是3月19日。
我对如何解决这个问题感到困惑。谁能告诉我,我做错了什么,如何正确地做到这一点?
正确地设置查询参数,并将数据时间值作为参数传递给查询,无论如何你都需要将表名连接起来,请尝试这样做