Zmieniam strukturę bazy danych. Zawartość kilku kolumn tabeli FinancialInstitution należy przenieść do tabeli Osoba . FinancialInstitution jest powiązany z osobą posiadającą klucz obcy. Każda instytucja finansowa potrzebuje identyfikatora odpowiedniej osoby. Tak więc, dla każdego nowego wiersza wstawionego w Person, identyfikator tego nowego wiersza (TOŻSAMOŚĆ) musi zostać skopiowany z powrotem do odpowiedniego wiersza FinancialInstitution.
Oczywistym sposobem na to jest iteracyjny kod T-SQL. Ale chcę wiedzieć, czy można to zrobić tylko za pomocą operacji opartych na zestawie.
Wyobrażałem sobie, że wewnętrzny poziom takiego żądania mógłby wyglądać następująco:
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;
Niestety wydaje się, że OUTPUT nie może korelować w ten sposób ...
sql-server
insert
output-clause
Yugo Amaryl
źródło
źródło
Person
? Lub zaktualizować istniejące? Albo chcesz wstawićPerson
, a następnieUPDATE FinancialInstitution
?Odpowiedzi:
Myślę, że możesz (ab) użyć
MERGE
do tego. Najpierw utwórz (tymczasową) tabelę:Następnie
MERGE
doPerson
(zamiastINSERT
), aby można było użyć kolumn tabel objętychOUTPUT
klauzulą:Następnie użyj tabeli tymczasowej, aby
UPDATE FinancialInstitution
:Test na: SQL-Fiddle
źródło