Estoy modificando la estructura de una base de datos. El contenido de varias columnas de la tabla FinancialInstitution debe transferirse a la tabla Persona . La institución financiera está vinculada a la persona con una clave externa. Cada institución financiera necesita la identificación de su persona correspondiente. Por lo tanto, para cada nueva línea insertada en Persona, la identificación de esta nueva línea (IDENTIDAD) debe copiarse nuevamente en la línea correspondiente de FinancialInstitution.
La forma obvia de hacer esto es un código T-SQL iterativo. Pero estoy interesado en saber si es posible hacerlo solo con operaciones basadas en conjuntos.
Imaginé que el nivel interno de tal solicitud sería 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;
Desafortunadamente, parece que OUTPUT no puede correlacionarse de esa manera ...
fuente
Person
? ¿O actualizar las existentes? ¿O quieres insertar enPerson
y luegoUPDATE FinancialInstitution
?Respuestas:
Supongo que podrías (ab) usarlo
MERGE
para esto. Primero cree una tabla (temporal):Luego
MERGE
enPerson
( en lugar deINSERT
), para que pueda usar columnas de las tablas involucradas en laOUTPUT
cláusula:Luego use la tabla temporal para
UPDATE FinancialInstitution
:Prueba en: SQL-Fiddle
fuente