Sql-Server
插入與子查詢表相關的 OUTPUT
我正在修改數據庫的結構。表FinancialInstitution的幾列的內容必須轉移到表Person中。FinancialInstitution 使用外鍵連結到 Person。每個 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;
不幸的是,似乎 OUTPUT 無法以這種方式關聯……
我想你可以(ab)使用
MERGE
這個。首先創建一個(臨時)表:CREATE TABLE tempIDs ( PersonId INT, FinancialInstitutionId INT ) ;
然後
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 ;
然後使用臨時表
UPDATE FinancialInstitution
:UPDATE fi SET fi.PersonId = t.PersonId FROM FinancialInstitution AS fi JOIN tempIDs AS t ON fi.Id = t.FinancialInstitutionId ;
測試:SQL-Fiddle