我想通過在存儲過程中的變量中存儲動態SQL來構建CASE WHEN語句,但我得到下面的錯誤。有人可以分享你的想法如何解決這個錯誤。謝謝。CASE語句在存儲過程中使用DYNAMIC SQL
--Code
SELECT
CASE WHEN ResultTableName LIKE '%Loss_ByEvent]'
THEN @SQLStmt =
N'CREATE TABLE dbo.' + ResultTableName + N' (
' + CreateStmt + N'
) ON Loss_ByAnalysis(SliceID)'
WHEN ResultTableName LIKE '%Loss_ByGeo]'
THEN @SQLStmt =
N'CREATE TABLE dbo.' + ResultTableName + N' (
' + CreateStmt + N'
) ON Loss_ByAnalysis(SliceID)'
ELSE
@SQLStmt =
N'CREATE TABLE dbo.' + ResultTableName + N' (
' + CreateStmt + N'
)'
END
,@DBName = DBName
,@ResultTableName = ResultTableName
FROM #CreateResult_ResultTables lr
WHERE ID = @ResultTableCount;
--error: -
Msg 102, Level 15, State 1, Procedure Procedure_name, Line 141 [Batch Start Line 7]
Incorrect syntax near '='.
爲什麼你需要一個存儲過程創建表?這對我來說似乎非常可怕,並且極有可能容易受到sql注入的影響。 –
在應用程序中存在一個現有的存儲過程...在while循環中,它遍歷表名列表並創建表。但我想要使用分區來創建表,以便對錶名進行分區。 – Teja
'THEN'接受表達式,而不是語句,並且'CASE ... END'的結果本身就是一個表達式。 'SELECT @SQLStmt = CASE WHEN ... THEN N'ELSE ... END'。 –