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
功能在功能上比存储过程更受限制。
虽然允许使用insert
,但只允许使用局部变量。正如documentation所说:
- 修改本地表变量的INSERT,UPDATE和DELETE语句。
另一方面,存储过程可以返回值。通常,这是一个状态代码,其中0表示一切都成功,而任何其他值表示进程失败。
如果要返回新创建的表,可以使用存储过程来执行此操作。如果您使用的是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