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
Run Code Online (Sandbox Code Playgroud)
后来我得到了
找不到存储过程'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);
Run Code Online (Sandbox Code Playgroud)
我在哪里错了?
如@MohammadSanati所述,OUTPUT只能插入表或表变量.
所以它假定@new_guid是一个表变量但无法找到它声明.(它声明为UNIQUEIDENTIFIER而非表格).因此你CREATE PROC失败..随后当你尝试调用它时它无法找到它而你得到'找不到存储过程....
所以你需要在你之后声明一个表变量BEGIN,如下所示:
DECLARE @OutputTable TABLE (AColumn UNIQUEIDENTIFIER)
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
OUTPUT INSERTED.id INTO @OutputTable (AColumn)
Run Code Online (Sandbox Code Playgroud)
然后将它加载到输出变量中,如下所示:
SELECT TOP 1 @new_guid = AColumn FROM @OutputTable
Run Code Online (Sandbox Code Playgroud)
注意:如果生成了多个记录,则只选择一个记录.
| 归档时间: |
|
| 查看次数: |
1405 次 |
| 最近记录: |