【发布时间】:2017-07-13 16:57:26
【问题描述】:
我正在尝试通过将动态 SQL 存储在存储过程中的变量中来构建 CASE WHEN 语句,但出现以下错误。有人可以分享您对如何解决此错误的想法。谢谢。
--代码
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;
--错误:-
Msg 102, Level 15, State 1, Procedure Procedure_name, Line 141 [Batch Start Line 7]
Incorrect syntax near '='.
【问题讨论】:
-
为什么需要存储过程来创建表?这对我来说似乎很可怕,并且很可能容易受到 sql 注入的影响。
-
应用程序中有一个现有的存储过程......在while循环中,它遍历表名列表并创建表。但我想为几个表名使用分区创建表..
-
THEN接受表达式,而不是语句,CASE ... END的结果本身就是一个表达式。SELECT @SQLStmt = CASE WHEN ... THEN N'' ELSE ... END. -
@Jeoren 你能帮我重写代码吗...
标签: sql sql-server stored-procedures sql-server-2012 sql-server-2016