Estou modificando a estrutura de um banco de dados. O conteúdo de várias colunas da tabela FinancialInstitution deve ser transferido para a tabela Person . FinancialInstitution está vinculado a Person com uma chave estrangeira. Cada Instituição Financeira precisa do Id de sua Pessoa correspondente. Assim, para cada nova linha inserida em Person, o id desta nova linha (IDENTITY) deve ser copiado de volta para a linha correspondente de FinancialInstitution.
A maneira óbvia de fazer isso é um código T-SQL iterativo. Mas estou interessado em saber se é possível fazer isso apenas com operações baseadas em conjunto.
Imaginei que o nível interno de tal solicitação seria algo como:
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;
Infelizmente, parece que OUTPUT não pode ser correlacionado dessa forma...
Eu acho que você poderia (ab) usar
MERGE
para isso. Primeiro crie uma tabela (temporária):Em seguida,
MERGE
emPerson
(em vez deINSERT
), para que você possa usar as colunas das tabelas envolvidas naOUTPUT
cláusula:Em seguida, use a tabela temporária para
UPDATE FinancialInstitution
:Teste em: SQL-Fiddle