m4r*_*4rc 10 sql-server insert inheritance
好的,设置场景。我有三个表,( Table1,Table2和DataTable),我想插入Table1和Table2使用DataTable作为源。因此,对于每一行,DataTable我都希望在Table1and 中有一排Table2,并且Table2需要id从Table1...插入(PK)
如果我要这样做...
INSERT INTO Table1 SELECT A, B, C FROM MyTable
INSERT INTO Table2 SELECT IDENTITY_INSERT(), D, E, F FROM MyTable
Run Code Online (Sandbox Code Playgroud)
我将ID最后插入的记录的Table1.
是CURSOR或WHILE循环来做到这一点的唯一途径?
Dan*_*her 10
一个可能对您有用的解决方案是使用 OUTPUT 子句,它会吐出所有插入的行,因此您可以将它们重新插入到不同的表中。但是,如果内存可用,这会对 Table2 上的外键约束施加限制。
无论如何,解决方案看起来像这样:
MERGE INTO Table1 AS t1
USING MyTable ON 1=0 -- always generates "not matched by target"
WHEN NOT MATCHED BY TARGET THEN
-- INSERT into Table1:
INSERT (A, B, C) VALUES (t1.A, t1.B, t1.C)
--- .. and INSERT into Table2:
OUTPUT inserted.ID, MyTable.D, MyTable.E, MyTable.F
INTO Table2 (ID, D, E, F);
Run Code Online (Sandbox Code Playgroud)
MERGE 与其他 DML 语句相反,可以引用除insertedand之外的其他表deleted,这对您在这里很有用。
更多:http : //sqlsunday.com/2013/08/04/cool-merge-features/
| 归档时间: |
|
| 查看次数: |
52351 次 |
| 最近记录: |