Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 插入到CASE EXEC SP中_Sql Server_Tsql_Stored Procedures_Insert - Fatal编程技术网

Sql server 插入到CASE EXEC SP中

Sql server 插入到CASE EXEC SP中,sql-server,tsql,stored-procedures,insert,Sql Server,Tsql,Stored Procedures,Insert,当我执行这条语句时,我得到了一个错误。 当某些条件为真时,如何将其更改为在上执行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

当我执行这条语句时,我得到了一个错误。 当某些条件为真时,如何将其更改为在上执行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 @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,但将整个insert语句都放在SP中。

如果尝试,会发生什么?它有用吗?“可能吗?”这不是一个真正有意义的问题。“明天太阳有可能升起吗?”答案是肯定的,但不升起的可能性也很小。请问一个更具体的问题,例如“当我尝试(此语句)时,它失败并出现错误…”或“当我执行(此语句)时,输出不是我期望的。我期望(此)但得到(此)”。关于某件事是否可能的模糊问题可以用“是的,它是”、“不,它不是”或“可能”来回答,所有这些都可能是真的。同样,要更具体一些。它以什么方式不起作用?你有错误吗?如果是,确切的错误信息是什么?你知道“不起作用”是什么意思-你的帖子和包含的信息。这是正确答案的原因是因为这就是为什么我没有尝试控制执行流程,只是简单地首先构建查询并执行它:)你的答案很出色。我的补充解释是针对OP的,因此他会理解为什么他的尝试没有成功,以及为什么必须使用
sp_executesql
。在你的回答中,这似乎更有意义。我感谢你的解释,这对任何阅读此答案的人都非常有帮助:)。
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