我正在尝试为存储过程INSERT
设置一个RETURN
的值,但是我无法使其正常工作。
我有一个名为"person.person_ids"
的表,其中有字段"id int, uid uniqueidentifier"
以及其他一些表,例如"person.employee"
,"person.client"
等。这些表都从"id"
表中获取"person.person_ids"
作为外键。>
该过程将执行以下操作:
CREATE PROCEDURE PERSON.NewPerson
AS
BEGIN
DECLARE @ret INT;
INSERT INTO PERSON.ID_PERSON
VALUES (NEWID());
SET @ret = SCOPE_IDENTITY()
RETURN @ret;
END
GO
我的INSERT
看起来像这样:
INSERT INTO PERSON.EMPLOYEE VALUES
(EXECUTE PERSON.NewPerson, 1, '15434235', '10768348153', '1962-3-2', '1999-10-2', 'PETER', '', 'SMITH', 'HAMMER')
GO
基本上,我试图创建一个函数存储过程,每当我向"person.person_ids"
中插入新记录时,就可以调用该函数以自动在"person.employee"
中生成新记录。
我尝试使用OUTPUT
中的INSERT
,但无法正常使用,并且在函数内部不允许插入。
答案 0 :(得分:2)
这是您的代码,已修复问题并建议进行一些改进。这些评论解释了什么以及为什么。
SP:
CREATE PROCEDURE PERSON.NewPerson
(
-- Use an output parameter to get values out of an SP
@NewId int out
)
AS
BEGIN
-- Recommended to always list the columns you are inserting to
-- Personally my preference is to select them (because that scales to multiple inserts), I never use the 'values' clause.
INSERT INTO PERSON.ID_PERSON (uid)
select newid();
SET @NewId = SCOPE_IDENTITY()
-- The return statement is for a status for the SP, usually 0 for success, some other int for an error
RETURN 0;
END
GO
呼叫SP:
declare @MyNewId int;
-- Run the SP before your insert to get your new value
exec PERSON.NewPerson @MyNewId out;
-- Then insert - ideally with a list of columns
INSERT INTO PERSON.EMPLOYEE
select @MyNewId, 1, '15434235', '10768348153', '1962-3-2', '1999-10-2', 'PETER', '', 'SMITH', 'HAMMER'