Sql 如何在插入后捕获唯一标识符

Sql 如何在插入后捕获唯一标识符,sql,sql-server,Sql,Sql Server,我必须在联接表中的现有表中创建新的电子邮件记录。我想更新一个字段,该字段表示这是一条新记录 例如: INSERT INTO dbo.email.email (dbo.email.eml_address, dbo.email.eml_customer_key) SELECT new_email, new_customer_key FROM NEW_TABLE Update dbo.email_ext Set dbo.email_ext.new_eml = '1' Where dbo.email_

我必须在联接表中的现有表中创建新的电子邮件记录。我想更新一个字段,该字段表示这是一条新记录

例如:

INSERT INTO dbo.email.email (dbo.email.eml_address, dbo.email.eml_customer_key)
SELECT new_email, new_customer_key
FROM NEW_TABLE

Update dbo.email_ext
Set dbo.email_ext.new_eml = '1'
Where dbo.email_ext.eml_key_ext = 'Recently create key from insert statement shown above'
使用子句捕获自动生成的ID/guid/defaults/etc

CREATE TABLE #test (
  id int identity(1,1) primary key,
  uid uniqueidentifier DEFAULT NEWID(),
  value varchar(max)
)

INSERT #test (value)
OUTPUT inserted.*
SELECT 'test'


id          guid                                 value
----------- ------------------------------------ ---------
1           72B70577-2679-4C2A-A575-62D30807B9D2 test

(1 row(s) affected)
使用子句捕获自动生成的ID/guid/defaults/etc

CREATE TABLE #test (
  id int identity(1,1) primary key,
  uid uniqueidentifier DEFAULT NEWID(),
  value varchar(max)
)

INSERT #test (value)
OUTPUT inserted.*
SELECT 'test'


id          guid                                 value
----------- ------------------------------------ ---------
1           72B70577-2679-4C2A-A575-62D30807B9D2 test

(1 row(s) affected)

您需要使用SCOPE_IDENTITY()值,它将包含刚刚创建的记录的ID,但只包含一个

假设您正在处理一条记录:

DECLARE @ID INT

INSERT INTO dbo.email (eml_address, eml_customer_key)
SELECT new_email, new_customer_key
FROM NEW_TABLE

SET @ID = SCOPE_IDENTITY()

Update dbo.email_ext
Set new_eml = '1'
Where eml_key_ext = @ID
如果要插入倍数,则需要将列表输出到一个表中(在本例中是一个表变量),并且可以一次全部更新它们

DECLARE @myIDs TABLE (NEWID INT)

INSERT INTO dbo.email (eml_address, eml_customer_key)
OUTPUT inserted.ID INTO @myIDs 
SELECT new_email, new_customer_key
FROM NEW_TABLE

Update t
Set new_eml = '1'
from dbo.email_ext t
join @myIDs m
   on t.eml_key_ext = m.ID

您需要使用SCOPE_IDENTITY()值,它将包含刚刚创建的记录的ID,但只包含一个

假设您正在处理一条记录:

DECLARE @ID INT

INSERT INTO dbo.email (eml_address, eml_customer_key)
SELECT new_email, new_customer_key
FROM NEW_TABLE

SET @ID = SCOPE_IDENTITY()

Update dbo.email_ext
Set new_eml = '1'
Where eml_key_ext = @ID
如果要插入倍数,则需要将列表输出到一个表中(在本例中是一个表变量),并且可以一次全部更新它们

DECLARE @myIDs TABLE (NEWID INT)

INSERT INTO dbo.email (eml_address, eml_customer_key)
OUTPUT inserted.ID INTO @myIDs 
SELECT new_email, new_customer_key
FROM NEW_TABLE

Update t
Set new_eml = '1'
from dbo.email_ext t
join @myIDs m
   on t.eml_key_ext = m.ID