我在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'
答案 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
的使用。