我需要使用在插入另一个表后生成的ID更新一个表中的列。这就是我所拥有的:
tbl1 (id, tbl2id, col1, col2)
tbl2 (id, col1, col2)
insert into tbl2
select col1, col2
from tbl1
where tbl1.tbl2id is null
此时我需要使用上面的insert语句插入的所有行的id填充tbl1.tbl2id,这样如果再次运行上面的insert语句,我将不会在tbl2中重复。我在SQL Server 2005上。
答案 0 :(得分:2)
使用OUTPUT子句和临时表。
OUTPUT子句信息在这里:http://msdn.microsoft.com/en-us/library/ms177564.aspx
应该看起来像:
CREATE TABLE #NewIDs (Tbl1Col1 INT, Tbl2ID INT)
insert into tbl2 (col1, col2)
OUTPUT inserted.col1, inserted.id INTO #NewIDs (Tbl1Col1, Tbl2ID)
select col1, col2
from tbl1
where tbl1.tbl2id is null
UPDATE t
SET t.tbl2id = tmp.Tbl2ID
FROM Tbl1 t
INNER JOIN #NewIDs tmp
ON tmp.Tbl1Col1 = t.Col1
真正的诀窍是确保您从Table2插入Table2的其中一个字段可以用于JOIN,因此希望它是唯一的,或者足够独特。唯一真正的复杂因素是表1的ID不是执行INSERT的查询的一部分,因此它不可用于OUTPUT子句。
答案 1 :(得分:0)
使用触发器可以
CREATE TRIGGER trigger_name
ON tbl2
AFTER INSERT
AS
INSERT tbl1 (tbl2id, col1, col2)
SELECT id, col1, col2
FROM inserted