当我执行此语句时,我在CASE周围得到一个错误。当某些条件成立时,如何将其更改为在上执行SP。条件将是变量
INSERT INTO myTable
(
Col 1
Col 2
)
CASE
WHEN Condition 1 AND Condition 2 THEN
Exec SP1
WHEN Condition 3 AND Condition 4 THEN
Exec SP2
END
感谢
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N'INSERT INTO myTable
(Col1, Col2) '
+ CASE
WHEN Condition 1 AND Condition 2 THEN
N'Exec SP1'
WHEN Condition 3 AND Condition 4 THEN
N'Exec SP2'
END
EXECUTE sp_executesql @Sql
此外,如果您的存储过程采用任何参数,您可以按如下方式添加它们:
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N'INSERT INTO myTable
(Col1, Col2) '
+ CASE
WHEN Condition 1 AND Condition 2 THEN
N'Exec SP1 @Param1'
WHEN Condition 3 AND Condition 4 THEN
N'Exec SP2 @Param2'
END
EXECUTE sp_executesql @Sql
,N'@Param1 DataType, @Param2 DataType'
,@Param1 ,@Param2
不,这不会起作用,因为insert语句希望在实际插入时找到一组与列匹配的数据。
您最好调用一个SP,并在其中包含一个if语句来执行条件分支,或者让条件按原样调用SP,但在SP中包含整个insert语句。