Quiero actualizar dos tablas de una vez. ¿Cómo hago eso en SQL Server 2005?
UPDATE
Table1,
Table2
SET
Table1.LastName='DR. XXXXXX',
Table2.WAprrs='start,stop'
FROM
Table1 T1,
Table2 T2
WHERE
T1.id = T2.id
AND
T1.id = '010008'
sql
sql-server
sql-server-2005
tsql
Jango
fuente
fuente
Respuestas:
No puede actualizar varias tablas en una declaración, sin embargo, puede usar una transacción para asegurarse de que dos
UPDATE
declaraciones sean tratadas atómicamente. También puede agruparlos para evitar un viaje de ida y vuelta.fuente
No puede actualizar dos tablas a la vez, pero puede vincular una actualización a una inserción usando
OUTPUT INTO
, y puede usar esta salida como una combinación para la segunda actualización:Cambié su
WHERE
condición de ejemplo para que sea otro campo que no seaid
. Si esid
que no necesita esta fantasíaOUTPUT
, puede simplementeUPDATE
la segunda tabla para lo mismoid='010008'
.fuente
T1.field
supone que es esoTable1.field
?Lo siento, afaik, no puedes hacer eso. Para actualizar los atributos en dos tablas diferentes, deberá ejecutar dos declaraciones separadas. Pero pueden estar en un lote (un conjunto de SQL enviado al servidor en un solo viaje de ida y vuelta)
fuente
La respuesta corta a eso es no. Si bien puede ingresar varias tablas en la
from
cláusula de una declaración de actualización, solo puede especificar una sola tabla después de laupdate
palabra clave. Incluso si escribe una vista "actualizable" (que es simplemente una vista que sigue ciertas restricciones), las actualizaciones como esta fallarán. Aquí están los clips relevantes de la documentación de MSDN (el énfasis es mío).ACTUALIZACIÓN (Transact-SQL)
CREAR VISTA (Transact-SQL)
Sin embargo, con toda honestidad, debe considerar usar dos declaraciones SQL diferentes dentro de una transacción según el ejemplo de LBushkin.
ACTUALIZACIÓN: Mi afirmación original de que podía actualizar varias tablas en una vista actualizable era incorrecta. En SQL Server 2005 y 2012, generará el siguiente error. He corregido mi respuesta para reflejar esto.
fuente
INSTEAD OF Specifies that the DML trigger is executed instead of the triggering SQL statement, therefore, overriding the actions of the triggering statements. INSTEAD OF cannot be specified for DDL or logon triggers.
Esto funciona para MySQL y en realidad es solo una transacción implícita, pero debería ser algo como esto:
si está realizando actualizaciones en varias tablas que requieren múltiples declaraciones ... lo que probablemente sea posible si actualiza una, luego otra en función de otras condiciones ... debe usar una transacción.
fuente
Debe colocar dos declaraciones de actualización dentro de una transacción
fuente
Puede escribir una declaración de actualización para una tabla y luego un activador en la actualización de la primera tabla , que actualiza la segunda tabla
fuente
Desde mi perspectiva, puede hacer esto, es una actualización individual de dos tablas en SQL SERVER:
fuente
Es tan simple como esta consulta que se muestra a continuación.
fuente