帮助T-SQL脚本:插入记录,然后在另一个语句中使用该插入的标识?

时间:2011-02-28 21:51:44

标签: sql tsql

作为序言,我对T-SQL语法知之甚少。

我想创建一个简单的SQL脚本,它将生成3个插入语句。

Insert A
Insert B
Insert C

在插入B语句中插入一个语句的标识或“ID”。 两个身份插入A&插入C语句中需要B。

伪代码看起来像:

INSERT INTO tableA
VALUES ('blah', 'blah')

INSERT INTO tableB
VALUES (IDENTITY_FROM_A_INSERT, 'foo')

INSERT INTO tableC
VALUES (IDENTITY_FROM_A_INSERT, IDENTITY_FROM_B_INSERT)

我将如何编写此脚本?

2 个答案:

答案 0 :(得分:19)

每次插入后使用SCOPE_IDENTITY()以获取插入行的标识(在当前会话中)。

我使用了两个变量来捕获这两个身份,然后将它们插入到第三个表中:

DECLARE @Id1 INT
DECLARE @Id2 INT

INSERT INTO tableA VALUES ('blah', 'blah')

SET @Id1 = SELECT SCOPE_IDENTITY()

INSERT INTO tableB VALUES (IDENTITY_FROM_A_INSERT, 'foo')

SET @Id2 = SELECT SCOPE_IDENTITY()

INSERT INTO tableC VALUES (@Id1, @Id2)

答案 1 :(得分:2)

scope_identity()非常适合单记录插入的整数标识符(+1到the other answer btw)。但是,如果您发现自己使用guid / uniqueidentifiernewsequentialid()newid()等)或一次插入多条记录,则需要一些不同的内容:

declare @id uniqueidentifier;
-- Table variable for storing your newly inserted identifiers:
declare @NewlyInsertedIds table 
(
   [Id] uniqueidentifier
);

insert [MyTable]
(
   [Blah1]
  ,[Blah2]
)
-- in the output clause you can access the inserted/deleted pseudo tables:
ouptut inserted.[Id]
into @NewlyInsertedIDs
(
   [Id]
)
values
(
   'Blah'
  ,'Blah'
);

select
 @id = [Id]
from @NewlyInsertedIds;

查看the OUTPUT Clause了解详情。