Principales respuestas
ACTUALIZAR CAMPOS DE TABLAS MEDIANTE INNER JOIN

Pregunta
-
HOLA A TODOS!!
MI PROBLEMA ES EL SIGUIENTE :
TENGO UN STORE PROCEDURE QUE ACTUALIZA UNA TABLA , PERO ESTA TABLA ESTA RELACIONADA CON OTRA TABLA.
LOS DEMAS CAMPOS DE LA TABLA 1 SE ACTUALIZAN SIN PROBLEMAS , PERO EL CAMPO PK DE LA TABLA 1 Y EL FK DE LA TABLA 2
SE QUEDAN IGUALES Y NO SE ACTUALIZAN. EL OBJETIVO ES QUE PUEDA ACTUALIZARLOS AMBOS .... AQUI ESTA MI QUERY:
DECLARE @SERIE INT
DECLARE @MODELO NVARCHAR(35)
DECLARE @DESCRIPCION NVARCHAR(50)
SET @SERIE=1
SET @MODELO='ABC'
SET @DESCRIPCION='PRUEBA'
UPDATE TBL_ARTICULO
SET
SERIE=@SERIE,
MODELO=@MODELO,
DESCRIPCION=@DESCRIPCION
WHERE SERIE=@SERIE
UPDATE TBL_INVENTARIO
SET SERIE=( SELECT TBL_ARTICULO.SERIE FROM TBL_ARTICULO
WHERE TBL_INVENTARIO.SERIE=TBL_ARTICULO.SERIE )
LO TENGO DE ESTA MANERA , HACIENDO DOS UPDATE , Y NO C COMO HACERLO CON UN SOLO UPDATE Y QUE ME ACTUALIZE TODO DE LA TABLA ARTICULOS Y DE LA TABLA INVENTARIO , SOLAMENTE ME INTERESA EL CAMPO SERIE.
COMO ME DICE:
0 ROWS AFCTED
1 ROWS AFECTED , PERO NO CAMBIA NADA DE NINGUNA DE LAS DOS TABLAS...
ESERO SU AYUDA PLZ.... :)
Indet
Respuestas
-
Bueno, haces varias preguntas, así que iré por partes:
- un UPDATE sólo puede afectar a una única tabla, así que si quieres actualizar dos tablas, tendrás que escribir dos instrucciones UPDATE, no hay otra (sí, se podría hacer por medio de un trigger INSTEAD OF, pero al final se sigue escribiendo dos UPDATE)
- el primer UPDATE no actualiza el campo SERIE (que supongo que es la PK) porque no le asignas un valor diferente: por un lado filtras por el valor 1 de este campo y por otro le asignas ese mismo 1... SQL no cambia nada porque así se lo indicas tú
- cuando quieres actualizar varios registros combinándolos con otro conjunto de resultados, la forma correcta de hacerlo sería así:
UPDATE i SET SERIE=a.SERIE FROM TBL_ARTICULO AS a INNER JOIN TBL_INVENTARIO AS i ON a.SERIE=i.SERIE
Y si necesitas actualizar la clave primaria de una tabla y existen otras tablas que a su vez están relacionadas con ésta, la forma de hacerlo es habilitando la opción ON UPDATE CASCADE de la clave foránea que hayas establecido.- Marcado como respuesta ING. Erickson Figueroa viernes, 23 de septiembre de 2011 9:56
Todas las respuestas
-
Bueno, haces varias preguntas, así que iré por partes:
- un UPDATE sólo puede afectar a una única tabla, así que si quieres actualizar dos tablas, tendrás que escribir dos instrucciones UPDATE, no hay otra (sí, se podría hacer por medio de un trigger INSTEAD OF, pero al final se sigue escribiendo dos UPDATE)
- el primer UPDATE no actualiza el campo SERIE (que supongo que es la PK) porque no le asignas un valor diferente: por un lado filtras por el valor 1 de este campo y por otro le asignas ese mismo 1... SQL no cambia nada porque así se lo indicas tú
- cuando quieres actualizar varios registros combinándolos con otro conjunto de resultados, la forma correcta de hacerlo sería así:
UPDATE i SET SERIE=a.SERIE FROM TBL_ARTICULO AS a INNER JOIN TBL_INVENTARIO AS i ON a.SERIE=i.SERIE
Y si necesitas actualizar la clave primaria de una tabla y existen otras tablas que a su vez están relacionadas con ésta, la forma de hacerlo es habilitando la opción ON UPDATE CASCADE de la clave foránea que hayas establecido.- Marcado como respuesta ING. Erickson Figueroa viernes, 23 de septiembre de 2011 9:56
-
OK TE ENTENDI PERFECTAMENTE !!
ESO ES LO QUE QUIERO ....LAS VARIABLES QUE VEZ EN EL QUERY SON DE EJEMPLO, PERO EN REALIDAD ESTAS LA MANDO DESDE LA APLICACION EN C#
EXACTO! ESO ES LO QUE QUIERO ACTUALIZAR LA CLAVE PRIMARIO DE LA TABLA ARTICULOS CON LOS CAMPOS ESPECIFICADOS Y A LA VEZ QUE SE CAMBIE LA FK EN LA TABLE INVENTARIO (DE INVENTARIO SOLO ME INTERESA LA FK)
ENTONCES COMO HAGO PARA ACTUALIZAR EN CASCADA COMO DICES ?
Indet -
echa un vistazo al tema: http://msdn.microsoft.com/es-es/library/ms186973.aspx