Sql 如何在insert语句中使用存储过程返回值?

Sql 如何在insert语句中使用存储过程返回值?,sql,sql-server-2008,stored-procedures,insert,Sql,Sql Server 2008,Stored Procedures,Insert,我有一个存储过程,比如 CREATE PROCEDURE GetSerial (@param1 int, @param2 int) AS BEGIN -- do some insert/updates, so I can't use function DECLARE @value AS int; SET @value = 3; return @value; END 现在我声明一个表变量 DECLARE @Serials AS TABLE ( ID int

我有一个存储过程,比如

CREATE PROCEDURE GetSerial (@param1 int, @param2 int)
AS
BEGIN
    -- do some insert/updates, so I can't use function
    DECLARE @value AS int;
    SET @value = 3;
    return @value;
END
现在我声明一个表变量

DECLARE @Serials AS TABLE 
(
   ID int,
   Value int
)
现在我想把这张桌子填满

INSERT INTO @Serials (ID, Value)
SELECT 1, GetSerial(1,2) -- *How can I call this?

那么,有谁能帮助我如何在SELECT语句中调用GetSerial存储过程来填充我的表呢?

我建议您避免进入这种模式/思考,因为存储过程只返回int,而这些int实际上是用来描述操作进行得如何,而不是操作的结果/数据。示例:0=>失败,1=>成功。非GetAgeInYears()=>29

有很多信息和具体示例,但在您的特定情况下,您需要执行过程并将结果代码捕获到变量中,然后插入:

DECLARE @ret INT;
EXEC @ret = GetSerial(1,2);
INSERT INTO @Serials VALUES(1, @ret);

实际上,如果要返回多个值,最好使用输出参数或结果集。有关更多信息,请参见上面的链接

您不能从SELECT语句调用存储过程。。。您必须使用
执行StoredProcedurename
这应该对您有所帮助:如果您想返回值,请使用函数。