簡體   English   中英

未執行動態 SQL 命令

[英]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 中都是nullanything + null = null所以它們保持null

事實上,無論如何你都不能做你想做的事,因為你只能在非動態查詢中使用相同的 wsy 中的參數,並且這不會讓你做諸如alter table類的事情,請參見http://www .sommarskog.se/dynamic_sql.html

您需要構建包括表名在內的整個字符串,而不是將任何參數傳遞給sp_executesql

您還需要仔細考慮是否要提供如此強大且危險(因為存在 SQL 注入的危險)的過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM