代码之家  ›  专栏  ›  技术社区  ›  AGx-07_162

可以在INSERT语句中调用存储过程吗?

  •  1
  • AGx-07_162  · 技术社区  · 7 年前

    简而言之,我想做的是:

    CREATE PROCEDURE sp_insertingStuff
        @value1
    AS
        INSERT INTO [my_table] (column1, column2)
        VALUES (@value1, execute sp_anotherSP)
    GO
    

    我需要知道的是:是否可以从 INSERT 这样的声明?如果有更好的方法,我愿意接受建议。我之所以需要这样做,是因为我需要运行一些IF语句来获取第二列的值。

    5 回复  |  直到 7 年前
        1
  •  3
  •   Noxthron    7 年前

    例如:

    CREATE PROCEDURE sp_insertingStuff
        @value1
    AS
        declare @value2 int
        exec @value2 = sp_anotherSP
    
        INSERT [my_table] (
            column1, 
            column2
        )
    
        VALUES (
            @value1, 
            @value2
        )
    GO
    
        2
  •  1
  •   Serkan Arslan    7 年前

    无法在中执行sp VALUES 部分在插入之前,必须执行并获取返回/输出值,如下所示。

    CREATE PROCEDURE sp_insertingStuff
        @value1
    AS
    
        DECLARE @anotherValue INT 
        execute @anotherValue = sp_anotherSP
    
        INSERT [my_table] (
            column1, 
            column2
        )
    
        VALUES (
            @value1, 
            @anotherValue
        )
    
        3
  •  0
  •   Stanislav Kundii    7 年前

    在另一个sp中添加输出参数 https://technet.microsoft.com/en-us/library/ms187004(v=sql.105).aspx

    DECLARE @Val <type>
    EXEC sp_anotherSP @Val OUTPUT
    ... insert using @val
    
        4
  •  0
  •   Mike R    7 年前

    提到的一种解决方案是添加输出参数。另一种方法是将存储过程重写为函数,只要存储过程尚未更新/插入/删除任何数据。

        5
  •  0
  •   ShivShankar Namdev    7 年前

    是的,这可以通过在insert sp中创建临时表来实现。 然后调用要调用的sp并将值存储在临时表中,然后可以在sp中使用该临时表的值,最后删除该临时表