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 . A FinancialInstitution está vinculada a Person com uma chave estrangeira. Cada Instituição Financeira precisa do ID da sua Pessoa correspondente. Portanto, para cada nova linha inserida em Pessoa, o ID dessa nova linha (IDENTITY) deve ser copiado novamente na linha correspondente de FinancialInstitution.
A maneira óbvia de fazer isso é um código T-SQL iterativo. Mas estou interessado em saber se é possível fazê-lo apenas com operações baseadas em conjuntos.
Imaginei que o nível interno de uma solicitação desse tipo 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 se correlacionar dessa maneira ...
fonte
Person
? Ou atualizar os existentes? Ou você deseja inserirPerson
e depoisUPDATE FinancialInstitution
?Respostas:
Eu acho que você poderia (ab) usar
MERGE
para isso. Primeiro, crie uma tabela (temporária):Depois,
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
fonte