Yug*_*ryl 23 sql-server insert output-clause
我正在修改数据库的结构。表FinancialInstitution的几个列的内容必须转移到表Person 中。金融机构通过外键链接到人。每个金融机构都需要其相应人员的 ID。因此,对于在 Person 中插入的每个新行,必须将该新行的 id (IDENTITY) 复制回 FinancialInstitution 的相应行中。
这样做的明显方法是迭代 T-SQL 代码。但我很想知道是否可以仅使用基于集合的操作来实现。
我想象这样一个请求的内部层次会是这样的:
INSERT INTO Person (Street1, Number1, City1, State1, PostCode1, CountryId1, WorkDirectPhone1, Fax1, Email1)
OUTPUT inserted.Id, FinancialInstitution.Id
SELECT Id, Street, Number, City, [State], PostCode, CountryId, PhoneNumber, Fax, Email
FROM FinancialInstitution;
Run Code Online (Sandbox Code Playgroud)
不幸的是,似乎 OUTPUT 不能以这种方式关联......
ype*_*eᵀᴹ 18
我想你可以(ab)MERGE用于这个。首先创建一个(临时)表:
CREATE TABLE tempIDs
( PersonId INT,
FinancialInstitutionId INT
) ;
Run Code Online (Sandbox Code Playgroud)
然后MERGE进入Person(而不是INSERT),因此您可以使用OUTPUT子句中涉及的表的列:
MERGE INTO Person
USING FinancialInstitution AS fi
ON 1 = 0
WHEN NOT MATCHED THEN
INSERT (Street1, Number1, City1, ...)
VALUES (fi.Street, fi.Number, fi.City, ...)
OUTPUT inserted.Id, fi.Id
INTO tempIDs ;
Run Code Online (Sandbox Code Playgroud)
然后使用临时表UPDATE FinancialInstitution:
UPDATE fi
SET fi.PersonId = t.PersonId
FROM FinancialInstitution AS fi
JOIN tempIDs AS t
ON fi.Id = t.FinancialInstitutionId ;
Run Code Online (Sandbox Code Playgroud)
测试:SQL-Fiddle
| 归档时间: |
|
| 查看次数: |
17263 次 |
| 最近记录: |