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

Sql 是否可以在INSERT语句中调用存储过程?,sql,sql-server,sql-server-2008,stored-procedures,sql-insert,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语句来获取第二列的值。您不能在值部分执行sp

简而言之,我想做的是:

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

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

您不能在
值部分执行sp。您必须在插入之前执行并获取返回/输出值,如下所示

CREATE PROCEDURE sp_insertingStuff
    @value1
AS

    DECLARE @anotherValue INT 
    execute @anotherValue = sp_anotherSP

    INSERT [my_table] (
        column1, 
        column2
    )

    VALUES (
        @value1, 
        @anotherValue
    )

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

CREATE PROCEDURE sp_insertingStuff
    @value1
AS

    DECLARE @anotherValue INT 
    execute @anotherValue = sp_anotherSP

    INSERT [my_table] (
        column1, 
        column2
    )

    VALUES (
        @value1, 
        @anotherValue
    )

在另一个sp中添加输出参数 及

DECLARE@Val
EXEC sp_anotherSP@Val输出
... 使用@val插入

在另一个sp中添加输出参数 及

DECLARE@Val
EXEC sp_anotherSP@Val输出
... 使用@val插入

执行第一个sp中insert语句上方的第二个sp 比如:


在第一个sp内insert语句上方执行第二个sp 比如:


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

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

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

也许您不需要存储过程来完成所需的工作。在这方面我们无法帮助您,除非您提供一些关于您实际问题的详细信息。这些“IF语句”是否可以替换为
CASE
表达式,因此,让逻辑成为声明性的而不是过程性的?千万不要将系统使用的前缀命名为存储过程sp_uu。也许你不需要存储过程来完成你想要的工作。在这方面我们无法帮助您,除非您提供一些关于您实际问题的详细信息。这些“IF语句”是否可以替换为
CASE
表达式,因此,让逻辑成为声明性的而不是过程性的?永远不要命名系统使用的前缀存储过程。我将研究提供的其他一些答案,但这一个达到了要求的结果,谢谢。我将研究提供的其他一些答案,但这一个达到了要求的结果,谢谢。
CREATE PROCEDURE sp_insertingStuff
    @value1
AS
    declare @value2 int
    exec @value2 = sp_anotherSP

    INSERT [my_table] (
        column1, 
        column2
    )

    VALUES (
        @value1, 
        @value2
    )
GO