【发布时间】:2018-11-19 23:09:42
【问题描述】:
我需要将一些表转换为临时(系统版本)表。为此,我编写了一个以动态方式执行的 SQL 命令。
查询不会引发错误,但不会执行 SQL 命令。它也不使用PRINT 打印命令。
我阅读了 SO 中的相关文章。根据他们的说法,我已经在脚本中声明了变量,并为它们提供了sp_executesql。请指教。
DECLARE @sqlCommand nvarchar(2000)
DECLARE @tableName nvarchar(100)
SET @sqlCommand =
'ALTER TABLE ' + @tableName + '
ADD [SysStartTime] DATETIME2
GO
ALTER TABLE ' + @tableName + '
ADD [SysEndTime] DATETIME2
GO
UPDATE ' + @tableName + ' SET [SysStartTime] = ''19000101 00:00:00.0000000'', [SysEndTime] = ''99991231 23:59:59.9999999''
GO
ALTER TABLE ' + @tableName + '
ALTER COLUMN [SysStartTime] DATETIME2 NOT NULL
GO
ALTER TABLE ' + @tableName + '
ALTER COLUMN [SysEndTime] DATETIME2 NOT NULL
GO
ALTER TABLE ' + @tableName + '
ADD PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime])
ALTER TABLE ' + @tableName + ' SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [History].ConditionAssessment))
GO'
PRINT @sqlCommand
EXECUTE sp_executesql @sqlCommand, N'@tableName nvarchar(100)', @tableName = 'ConditionAssessmentData'
【问题讨论】:
-
因为你的两个变量都是空值,这就是它不打印任何东西的原因,我建议你对表、列使用 Quotename() ......小心那里的 SQL 注入。
标签: sql-server dynamic-sql sqlcommand