【问题标题】:How do I retrieve and stores these guids for later use?如何检索和存储这些指南以供以后使用?
【发布时间】:2016-02-03 15:33:47
【问题描述】:

我有一张由

生成的表Partners
CREATE TABLE Partners ( 
    id UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(),
    name NVARCHAR(50) NOT NULL,
    email NVARCHAR(254) NOT NULL, -- 254 is optimal length according to http://stackoverflow.com/questions/1199190/what-is-the-optimal-length-for-an-email-address-in-a-database
    PRIMARY KEY (id)
);

并尝试在存储过程中插入一行并检索插入行的id

CREATE PROCEDURE AddPartner 
     @name NVARCHAR(50), @email NVARCHAR(254)
AS
BEGIN
    SET NOCOUNT ON 
    INSERT INTO Partners (name,email)
    OUTPUT INSERTED.id INTO @new_guid
    VALUES (@name,@email)   
    SELECT @new_guid
END  

假设我想 (1) 调用 AddPartner(name,email) 等于 ('some dude','dude192@gmail.com) 并返回 id (调用它 dude_id) 以便我以后可以 (2) 在插入另一个时使用它行:

INSERT INTO Answers (question_id,partner_id,val) VALUES (1,dude_id,24);

我该怎么做呢?在 (1) 和 (2) 之间使用 GO 语句会毁掉一切吗?

【问题讨论】:

标签: sql sql-server tsql database-design


【解决方案1】:

Output Parameter 添加到您的程序中

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 


DECLARE @new_guid AS UNIQUEIDENTIFIER 

EXEC Addpartner 'some dude', 'dude192@gmail.com', @new_guid  output

INSERT INTO Answers
            (question_id,partner_id,val)
VALUES      (@output_identity,'dude_id',24); 

【讨论】:

  • idUNIQUEIDENTIFIER,而不是 INT
  • @user5648283 - 立即查看
  • 我在OUTPUT INSERTED.id INTO @new_guid 行收到错误Must declare the table variable "@new_guid".
猜你喜欢
  • 2021-06-15
  • 1970-01-01
  • 2012-01-29
  • 2021-11-05
  • 1970-01-01
  • 2017-11-28
  • 2013-06-23
  • 2020-05-04
  • 1970-01-01
相关资源
最近更新 更多