获取插入的表标识值并更新另一个表

时间:2012-08-23 15:40:44

标签: sql-server tsql

我在TablesAs KeyA列上的TableB上有两个具有外键约束的表。到目前为止,我一直在进行手动插入,因为它们只需添加几行。现在我需要进行批量插入,所以我的问题是如果我在TableA中插入多行,我如何获得所有这些标识值并将它们与其他列值一起插入TableB。请参阅下面的脚本。

INSERT INTO Tablea
       ([KeyA]
       ,[Value] )
    SELECT 4 ,'StateA'
UNION ALL
SELECT 5 ,'StateB'
UNION ALL
SELECT 6 ,'StateC'

INSERT INTO Tableb
       ([KeyB]
       ,[fKeyA] //Get value from the inserted row from TableA
       ,[Desc])
SELECT 1 ,4,'Value1'
UNION ALL
SELECT 2 ,5,'Value2'
UNION ALL
SELECT 3 ,6, 'Value3'

2 个答案:

答案 0 :(得分:2)

您可以使用INSERT的OUTPUT子句执行此操作。这是一个例子:

CREATE TABLE #temp (id [int] IDENTITY (1, 1) PRIMARY KEY CLUSTERED, Val int)

CREATE TABLE #new (id [int], val int)

INSERT INTO #temp (val) OUTPUT inserted.id, inserted.val INTO #new VALUES (5), (6), (7) 

SELECT id, val FROM #new

DROP TABLE #new
DROP TABLE #temp

返回的结果集包括插入的IDENTITY值。

答案 1 :(得分:0)

Scope identity sometimes returns incorrect value。请参阅变通方法部分中OUTPUT的使用。