use*_*283 1 sql t-sql sql-server database-design
我在我的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);
我在哪里错了?
如@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
注意:如果生成了多个记录,则只选择一个记录.