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