[英]Dynamic SQL command not getting executed
我需要將一些表轉換為臨時(系統版本)表。 為此,我編寫了一個以動態方式執行的 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'
它不會打印也不會執行,因為@tableName
和@sqlCommand
在 T-SQL 中都是null
和anything + null = null
所以它們保持null
。
事實上,無論如何你都不能做你想做的事,因為你只能在非動態查詢中使用相同的 wsy 中的參數,並且這不會讓你做諸如alter table
類的事情,請參見http://www .sommarskog.se/dynamic_sql.html 。
您需要構建包括表名在內的整個字符串,而不是將任何參數傳遞給sp_executesql
。
您還需要仔細考慮是否要提供如此強大且危險(因為存在 SQL 注入的危險)的過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.