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

时间:2017-10-23 12:53:05

标签: sql sql-server sql-server-2008 stored-procedures sql-insert

简而言之,这就是我要做的事情:

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

我需要知道的是:是否可以在INSERT语句中执行存储过程?如果有更好的方法,我可以接受建议。我需要做这样的事情的原因是因为我需要运行一些IF语句来获取第二列的值。

5 个答案:

答案 0 :(得分:3)

在第一个sp内的insert语句上方执行第二个 像:

CREATE PROCEDURE sp_insertingStuff
    @value1
AS
    declare @value2 int
    exec @value2 = sp_anotherSP

    INSERT [my_table] (
        column1, 
        column2
    )

    VALUES (
        @value1, 
        @value2
    )
GO

答案 1 :(得分:1)

您无法在VALUES部分执行sp。你必须在插入之前执行并获得返回/输出值,就像这样。

CREATE PROCEDURE sp_insertingStuff
    @value1
AS

    DECLARE @anotherValue INT 
    execute @anotherValue = sp_anotherSP

    INSERT [my_table] (
        column1, 
        column2
    )

    VALUES (
        @value1, 
        @anotherValue
    )

答案 2 :(得分:0)

在sp_anotherSP中添加OUTPUT参数 https://technet.microsoft.com/en-us/library/ms187004(v=sql.105).aspx

DECLARE @Val <type>
EXEC sp_anotherSP @Val OUTPUT
... insert using @val

答案 3 :(得分:0)

提到的一个解决方案是添加OUTPUT参数。另一种方法是将存储过程重写为函数,只要存储过程还没有UPDATE / INSERT / DELETE任何数据。

答案 4 :(得分:0)

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