我在我的AddPartner
存储过程中获取它:
-- Create stored procedure for inserting a partner and returning the id of that inserted partner
CREATE PROCEDURE AddPartner (@name NVARCHAR(50),
@email NVARCHAR(254),
@new_guid UNIQUEIDENTIFIER OUTPUT)
AS
BEGIN
SET NOCOUNT ON
INSERT INTO Partners (name, email)
OUTPUT INSERTED.id INTO @new_guid
VALUES (@name, @email)
END
然后我得到
无法找到存储过程' AddPartner'。
但我认为这与上述错误有关?我试图使用它,以便我可以获取新插入项目的id
并使用它插入相关表格中:
DECLARE @first_partner_id AS UNIQUEIDENTIFIER
EXEC AddPartner 'Haliburton', 'DCheney@Haliburton.org', @first_partner_id OUTPUT;
INSERT INTO Partners (name, email)
VALUES ('Berkshire Hathaway', 'WarrenBridgemaster@bershire.org');
INSERT INTO Partners (name, email)
VALUES ('Jason', 'jason89@gmail.com');
-- Partners
-- ============================================================
-- id | name | email
-- ============================================================
-- 1 | 'Haliburton' | 'DCheney@Haliburton.org'
-- 2 | 'Berkshire Hathaway' | 'WarrenBridgemaster@bershire.org'
-- 3 | 'Jason' | 'jason89@gmail.com'
INSERT INTO Answers (question_id, partner_id, val)
VALUES (1, @first_partner_id, 24);
INSERT INTO Answers (question_id, partner_id, val)
VALUES (1, @first_partner_id, 50);
INSERT INTO Answers (question_id, partner_id, val)
VALUES (3, @first_partner_id, 90);
我在哪里错了?
答案 0 :(得分:5)
如@MohammadSanati回答中所述,OUTPUT
只能插入表或表变量中。
因此它假设@new_guid
是一个表变量但找不到它。 (它声明为UNIQUEIDENTIFIER而非表格)。因此你的CREATE PROC
失败..随后当你尝试调用它时它无法找到它并且你得到'找不到存储过程....
所以你需要在BEGIN
之后声明一个表变量,如下所示:
DECLARE @OutputTable TABLE (AColumn UNIQUEIDENTIFIER)
然后像这样使用它:
OUTPUT INSERTED.id INTO @OutputTable (AColumn)
然后将其加载到输出变量中,如下所示:
SELECT TOP 1 @new_guid = AColumn FROM @OutputTable
注意:如果生成了多条记录,则只选择一条记录。
答案 1 :(得分:2)
基于以下文档,输出变量必须是表变量
<OUTPUT_CLAUSE> ::=
{
[ OUTPUT <dml_select_list> INTO { @table_variable | output_table } [ ( column_list ) ] ]
[ OUTPUT <dml_select_list> ]
}