我想用“存储过程”作为函数编写我创建的代码

问题描述 投票:0回答:2
CREATE PROC add_person
(
    @id tinyint,
    @name nvarchar(max),
    @surname nvarchar(max),
    @salary int,
    @job nvarchar(max)
)
AS
BEGIN
    INSERT INTO information
    VALUES(@id,@name,@surname,@salary,@job)
END

我想把这段代码写成一个函数。但是“回归”的概念让我感到困惑。这就是为什么我不能。

我试着把上面的代码写成一个函数。这段代码出来了。

CREATE FUNCTION add_person
(
    @id tinyint,
    @name nvarchar(max),
    @surname nvarchar(max),
    @salary int,
    @job nvarchar(max)
)
RETURNS TABLE
AS
BEGIN
    RETURN INSERT INTO information -- not work
    VALUES(@id,@name,@surname,@salary,@job)
END
sql sql-server
2个回答
1
投票

功能在功能上比存储过程更受限制。

虽然允许使用insert,但只允许使用局部变量。正如documentation所说:

  • 修改本地表变量的INSERT,UPDATE和DELETE语句。

另一方面,存储过程可以返回值。通常,这是一个状态代码,其中0表示一切都成功,而任何其他值表示进程失败。


2
投票

如果要返回新创建的表,可以使用存储过程来执行此操作。如果您使用的是SQL Server,则代码为:

BEGIN
    INSERT INTO information -- not work
    VALUES(@id,@name,@surname,@salary,@job);
    SELECT * FROM information WHERE id = @@identity; -- this is the primary key just created.
END
© www.soinside.com 2019 - 2024. All rights reserved.