Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Update Con Alguna Falla ¿cual Es?

Estas en el tema de Update Con Alguna Falla ¿cual Es? en el foro de SQL Server en Foros del Web. Hola gente del foro!!!!! Les cuento que arranque otra vez con una duda y no me puedo dar cuenta porque no funciona, me tira un ...
  #1 (permalink)  
Antiguo 01/07/2008, 14:23
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 6 meses
Puntos: 0
Update Con Alguna Falla ¿cual Es?

Hola gente del foro!!!!! Les cuento que arranque otra vez con una duda y no me puedo dar cuenta porque no funciona, me tira un error despues del UPDATE, alguien podria depurarlo para saber cual es mi error? ME ESTA VOLVIENDO LOCO!!!
GRACIAS!!!



set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[SP_FICHA_ID_PARA_MODIFICACIONES]
-- Valor de Entrada
@ID int,

-- Valores de Salida
@Id_Personal int, -- OUTPUT,
@carpeta smallint, -- OUTPUT,
@apellido varchar (20), -- OUTPUT,
@nombre varchar (20), -- OUTPUT,
@grado varchar (35), -- OUTPUT,
@escalafon varchar (25), -- OUTPUT,
@lp int, -- OUTPUT,
@dni int, --OUTPUT,
@foto varchar (150), -- OUTPUT,
@orden int, -- OUTPUT,
@sit varchar (25), -- OUTPUT,
@destino varchar (255)-- OUTPUT

as

-- Asimilo cada variable arriba creada con cada campo real

UPDATE dbo.ASCENSOS INNER JOIN

dbo.GRADO ON dbo.ASCENSOS.Id_Grado = dbo.GRADO.Id_Grado INNER JOIN

dbo.PERSONAL ON dbo.ASCENSOS.Id_Personal = dbo.PERSONAL.Id_Personal INNER JOIN

dbo.SITUACION_DE_REVISTA ON dbo.PERSONAL.Id_Revista = dbo.SITUACION_DE_REVISTA.Id_Revista INNER JOIN

dbo.DESTINOS ON dbo.PERSONAL.Id_Personal = dbo.DESTINOS.Id_Personal INNER JOIN

dbo.DEPENDENCIAS ON dbo.DESTINOS.Id_Cod_Dpcia = dbo.DEPENDENCIAS.Id_Cod_Dpcia INNER JOIN

dbo.DATOS_SECUNDARIOS ON dbo.PERSONAL.Id_Personal = dbo.DATOS_SECUNDARIOS.Id_Personal INNER JOIN

dbo.FOTOS ON dbo.FOTOS.Id_Personal = dbo.PERSONAL.Id_Personal INNER JOIN

dbo.ESCALAFON ON dbo.PERSONAL.Id_Escalafon = dbo.ESCALAFON.Id_Escalafon

/*dbo.ASCENSOS,
dbo.GRADO,
dbo.PERSONAL,
dbo.SITUACION_DE_REVISTA,
dbo.DESTINOS,
dbo.DEPENDENCIAS,
dbo.DATOS_SECUNDARIOS,
dbo.FOTOS,
dbo.ESCALAFON
*/
SET
Id_Personal = ISNULL (@Id_Personal, Id_Personal),
CARPETA = ISNULL (@carpeta, CARPETA),
APELLIDO = ISNULL (@apellido, apellido),
NOMBRES = ISNULL (@nombre, NOMBRES),
CAMPO_GRADO = ISNULL (@grado, CAMPO_GRADO),
CAMPO_ESCALAFON = ISNULL (@escalafon, CAMPO_ESCALAFON),
LEGAJO_PERSONAL = ISNULL (@lp, LEGAJO_PERSONAL),
DNI = ISNULL (@dni, DNI),
FOTO = ISNULL (@foto, FOTO),
ORDEN_DE_ESCALAFON = ISNULL (@orden, ORDEN_DE_ESCALAFON),
CAMPO_SITUACION_DE_REVISTA = ISNULL (@sit, CAMPO_SITUACION_DE_REVISTA),
DEPENDENCIA = ISNULL (@destino, DEPENDENCIA)

--De que tablas saco los campos anteriores

FROM
dbo.ASCENSOS INNER JOIN

dbo.GRADO ON dbo.ASCENSOS.Id_Grado = dbo.GRADO.Id_Grado INNER JOIN

dbo.PERSONAL ON dbo.ASCENSOS.Id_Personal = dbo.PERSONAL.Id_Personal INNER JOIN

dbo.SITUACION_DE_REVISTA ON dbo.PERSONAL.Id_Revista = dbo.SITUACION_DE_REVISTA.Id_Revista INNER JOIN

dbo.DESTINOS ON dbo.PERSONAL.Id_Personal = dbo.DESTINOS.Id_Personal INNER JOIN

dbo.DEPENDENCIAS ON dbo.DESTINOS.Id_Cod_Dpcia = dbo.DEPENDENCIAS.Id_Cod_Dpcia INNER JOIN

dbo.DATOS_SECUNDARIOS ON dbo.PERSONAL.Id_Personal = dbo.DATOS_SECUNDARIOS.Id_Personal INNER JOIN

dbo.FOTOS ON dbo.FOTOS.Id_Personal = dbo.PERSONAL.Id_Personal INNER JOIN

dbo.ESCALAFON ON dbo.PERSONAL.Id_Escalafon = dbo.ESCALAFON.Id_Escalafon /*LEFT OUTER JOIN

dbo.ESPECIALIDAD ON dbo.PERSONAL.Id_Cod_especialidad = dbo.ESPECIALIDAD.Id_Cod_especialidad LEFT OUTER JOIN

dbo.SUBESCALAFON ON dbo.PERSONAL.Id_Subescalafon = dbo.SUBESCALAFON.Id_Subescalafon*/


--Parametrizo para que me de los datos de grado y destino como actuales, situacion de revista
--"en actividad" (legajo en papel no se encuentra en el archivo) y valor de entrada LP

WHERE (dbo.ASCENSOS.ACTUAL_ASCENSO = 1) AND (dbo.DESTINOS.ACTUAL_DESTINOS = 1) AND
(dbo.SITUACION_DE_REVISTA.TIPO_SITUACION_REVISTA = 1) AND (dbo.PERSONAL.Id_Personal = @ID)
SET DATEFORMAT dmy
  #2 (permalink)  
Antiguo 01/07/2008, 15:01
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: Update Con Alguna Falla ¿cual Es?

¿Cual es el error?, digo, para no analizar todo el codigo
  #3 (permalink)  
Antiguo 01/07/2008, 15:13
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Update Con Alguna Falla ¿cual Es?

ME PONE:

" Mens 156, Nivel 15, Estado 1, Procedimiento SP_FICHA_ID_PARA_MODIFICACIONES, Línea 25
Sintaxis incorrecta cerca de la palabra clave 'INNER'." Y ME MARCA EL PRIMER INNER LUEGO DEL UPDATE, PERO YO HICE VARIAS MODIFICACIONES Y SIEMPRE EL ERROR, ME LO MARCA DONDE ESTA EL UPDATE, TE AGRADEZCO TUS RESPUESTAS!!!!
  #4 (permalink)  
Antiguo 01/07/2008, 15:54
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Update Con Alguna Falla ¿cual Es?

Y si le dices que campos quieres actualizar ?...



Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 01/07/2008, 16:04
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Update Con Alguna Falla ¿cual Es?

quiero modificar los siguientes campos:

Id_Personal = ISNULL (@Id_Personal, Id_Personal),
CARPETA = ISNULL (@carpeta, CARPETA),
APELLIDO = ISNULL (@apellido, apellido),
NOMBRES = ISNULL (@nombre, NOMBRES),
CAMPO_GRADO = ISNULL (@grado, CAMPO_GRADO),
CAMPO_ESCALAFON = ISNULL (@escalafon, CAMPO_ESCALAFON),
LEGAJO_PERSONAL = ISNULL (@lp, LEGAJO_PERSONAL),
DNI = ISNULL (@dni, DNI),
FOTO = ISNULL (@foto, FOTO),
ORDEN_DE_ESCALAFON = ISNULL (@orden, ORDEN_DE_ESCALAFON),
CAMPO_SITUACION_DE_REVISTA = ISNULL (@sit,
CAMPO_SITUACION_DE_REVISTA),

DEPENDENCIA = ISNULL (@destino, DEPENDENCIA)

de las tablas que te mando a continuacion:


dbo.ASCENSOS INNER JOIN

dbo.GRADO ON dbo.ASCENSOS.Id_Grado = dbo.GRADO.Id_Grado INNER JOIN

dbo.PERSONAL ON dbo.ASCENSOS.Id_Personal = dbo.PERSONAL.Id_Personal INNER JOIN

dbo.SITUACION_DE_REVISTA ON dbo.PERSONAL.Id_Revista = dbo.SITUACION_DE_REVISTA.Id_Revista INNER JOIN

dbo.DESTINOS ON dbo.PERSONAL.Id_Personal = dbo.DESTINOS.Id_Personal INNER JOIN

dbo.DEPENDENCIAS ON dbo.DESTINOS.Id_Cod_Dpcia = dbo.DEPENDENCIAS.Id_Cod_Dpcia INNER JOIN

dbo.DATOS_SECUNDARIOS ON dbo.PERSONAL.Id_Personal = dbo.DATOS_SECUNDARIOS.Id_Personal INNER JOIN

dbo.FOTOS ON dbo.FOTOS.Id_Personal = dbo.PERSONAL.Id_Personal INNER JOIN

dbo.ESCALAFON ON dbo.PERSONAL.Id_Escalafon = dbo.ESCALAFON.Id_Escalafon
  #6 (permalink)  
Antiguo 01/07/2008, 16:33
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Update Con Alguna Falla ¿cual Es?

La sintaxis del update es:

Código:
Update MiTabla 
Set MisCampo1 = c.MiNuevoValor
From (
        Consulta
        ) c
Where MiCondicion
No he visto que se pueda actualizar una serie de joins...

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #7 (permalink)  
Antiguo 01/07/2008, 16:39
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Update Con Alguna Falla ¿cual Es?

Cita:
Iniciado por Andres95 Ver Mensaje
La sintaxis del update es:

Código:
Update MiTabla 
Set MisCampo1 = c.MiNuevoValor
From (
        Consulta
        ) c
Where MiCondicion
No he visto que se pueda actualizar una serie de joins...

Saludos!
el problema es que donde dice MiTabla yo tendria que poner MISTABLAS y ahi es donde no logro hacer funcionar el UPDATE, cuando quiero hacerlo sobre varios campos de varias tablas, por eso puse los joins, pero en realidad no se si es asi realmente, esa era la idea de la consulta.
  #8 (permalink)  
Antiguo 01/07/2008, 18:34
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: Update Con Alguna Falla ¿cual Es?

Update MiTabla
Set Campo1 = t1.campox
Campo2 = t2.campoz
Campo3 = t3.campol
Campo4 = t4.campoA
FROM
MiTabla t1 join Tx t2 ON t1.id = t2.id
join Ti t3 ON t1.id = t3.id
join Tz t4 ON t2.id = t4.id
Where MiCondicion
  #9 (permalink)  
Antiguo 03/07/2008, 16:29
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Update Con Alguna Falla ¿cual Es?

hola IISLAS!!! quizas no interprete muy bien el codigo que me enviaste pero me parecio, que seguia actualizando datos de una tabla porque arriba dice "update miTabla, y lo que yo quiero hacer no es que tenga en cuenta a varias tablas al hacer una modificacion en una sino que modifique x campos en la tabla1, yy campos de la tabla2, y zz en la tabla3, me explico?
TRAIGO VARIOS CAMPOS (QUE SE ENCUENTRAN EN VARIAS TABLAS) Y MODIFICO ESOS CAMPOS DE ESAS TABLAS,


GRACIAS POR LAS RESPUESTAS!!!!
  #10 (permalink)  
Antiguo 03/07/2008, 18:34
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: Update Con Alguna Falla ¿cual Es?

En un solo UPDATE, no puedes hacer la modificacion de "n" numero de tablas.

Tienes que hacerlo, UNO X UNO
  #11 (permalink)  
Antiguo 04/07/2008, 08:29
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Update Con Alguna Falla ¿cual Es?

Ya decia yo que se me hacia rara la estructura, jejeje ...

Un saludo a ambos...

__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #12 (permalink)  
Antiguo 04/07/2008, 09:39
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Update Con Alguna Falla ¿cual Es?

y como podria hacer? e acces podia modificar varias tablas a la vez desde un formulario... tendria que poner un update debajo del otro en el mismo sp?
  #13 (permalink)  
Antiguo 04/07/2008, 10:23
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Update Con Alguna Falla ¿cual Es?

Asi es, utilizando transacciones aseguraras la integridad de la info...

Begin Transaction
Commit Transaction
Rollback Transaction
@@Error

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #14 (permalink)  
Antiguo 08/07/2008, 11:12
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Update Con Alguna Falla ¿cual Es?

Cada vez se me complica mas!!!! No puedo creer que sea tan dificil hacer algo tan simple en SQL SERVER ahora en el 2008!!!
Bueno, basta de llanto, a sobreponerse, entonces, la solucion seria algo como esto? Por favor diganme en que me equivoco porque no doy con la solucion desde hace mas o menos un mes, les transcribo una parte de lo que hice, pero el resto seria igual, no se rian mucho...

ALTER PROCEDURE [dbo].[SP_FICHA_ID_PARA_MODIFICACIONES]
@ID int,
@Id_Personal int output,
@carpeta smallint output,
@apellido varchar (20) output,
@nombre varchar (20) output,
@grado varchar (35) output,
@escalafon varchar (25) output,
@lp int output,
@dni int output,
@foto varchar (150) output,
@orden int output,
@sit varchar (25) output,
@destino varchar (255) output
as
UPDATE
GRADO
SET
CAMPO_GRADO = ISNULL (@grado, CAMPO_GRADO)
FROM
dbo.ASCENSOS INNER JOIN
dbo.GRADO ON dbo.ASCENSOS.Id_Grado = dbo.GRADO.Id_Grado INNER JOIN
dbo.PERSONAL ON dbo.ASCENSOS.Id_Personal = dbo.PERSONAL.Id_Personal INNER JOIN
dbo.SITUACION_DE_REVISTA ON dbo.PERSONAL.Id_Revista = dbo.SITUACION_DE_REVISTA.Id_Revista INNER JOIN
dbo.DESTINOS ON dbo.PERSONAL.Id_Personal = dbo.DESTINOS.Id_Personal INNER JOIN
dbo.DEPENDENCIAS ON dbo.DESTINOS.Id_Cod_Dpcia = dbo.DEPENDENCIAS.Id_Cod_Dpcia INNER JOIN
dbo.DATOS_SECUNDARIOS ON dbo.PERSONAL.Id_Personal = dbo.DATOS_SECUNDARIOS.Id_Personal INNER JOIN
dbo.FOTOS ON dbo.FOTOS.Id_Personal = dbo.PERSONAL.Id_Personal INNER JOIN
dbo.ESCALAFON ON dbo.PERSONAL.Id_Escalafon = dbo.ESCALAFON.Id_Escalafon
WHERE (dbo.ASCENSOS.ACTUAL_ASCENSO = 1) AND (dbo.DESTINOS.ACTUAL_DESTINOS = 1) AND
(dbo.SITUACION_DE_REVISTA.TIPO_SITUACION_REVISTA = 1) AND (dbo.PERSONAL.Id_Personal = @ID)
SET DATEFORMAT dmy

UPDATE
ESCALAFON
SET
CAMPO_ESCALAFON = ISNULL (@escalafon, CAMPO_ESCALAFON)
FROM
dbo.ASCENSOS INNER JOIN
dbo.GRADO ON dbo.ASCENSOS.Id_Grado = dbo.GRADO.Id_Grado INNER JOIN
dbo.PERSONAL ON dbo.ASCENSOS.Id_Personal = dbo.PERSONAL.Id_Personal INNER JOIN
dbo.SITUACION_DE_REVISTA ON dbo.PERSONAL.Id_Revista = dbo.SITUACION_DE_REVISTA.Id_Revista INNER JOIN
dbo.DESTINOS ON dbo.PERSONAL.Id_Personal = dbo.DESTINOS.Id_Personal INNER JOIN
dbo.DEPENDENCIAS ON dbo.DESTINOS.Id_Cod_Dpcia = dbo.DEPENDENCIAS.Id_Cod_Dpcia INNER JOIN
dbo.DATOS_SECUNDARIOS ON dbo.PERSONAL.Id_Personal = dbo.DATOS_SECUNDARIOS.Id_Personal INNER JOIN
dbo.FOTOS ON dbo.FOTOS.Id_Personal = dbo.PERSONAL.Id_Personal INNER JOIN
dbo.ESCALAFON ON dbo.PERSONAL.Id_Escalafon = dbo.ESCALAFON.Id_Escalafon
WHERE (dbo.ASCENSOS.ACTUAL_ASCENSO = 1) AND (dbo.DESTINOS.ACTUAL_DESTINOS = 1) AND
(dbo.SITUACION_DE_REVISTA.TIPO_SITUACION_REVISTA = 1) AND (dbo.PERSONAL.Id_Personal = @ID)
SET DATEFORMAT dmy

Y ASI CON CADA UNO DE LOS CAMPOS DE LAS DIFERENTES TABLAS?
  #15 (permalink)  
Antiguo 08/07/2008, 11:55
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Update Con Alguna Falla ¿cual Es?

No necesariamente, los joins en los updates se usan para actualizar mas de una fila a la vez. Si solo requieres actualizar un registro no son necesarios los joins, solo filtra por el id de la tabla que deseas actualizar y listo.

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #16 (permalink)  
Antiguo 08/07/2008, 12:15
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Update Con Alguna Falla ¿cual Es?

Si, pero en algunas tengo que modificar un campo y en otras tablas tengo que modificar varios campos, por eso los JOINS, igualmente, lo principal seria que es esa la mejor forma de actualizar varios campos de varias tablas a la vez?se me hace que desde un principio no me supe expresar bien y que quizas no me entiendan, en un SP tengo que poner:


SP:

HACER UN UPDATE DE LOS CAMPOS DATO1 DATO2 DATO3 DATO4 DATO5 (siempre que el usuario quiera, puede querer solo modificar el DATO3 Y DATO5 o el DATO2 solamente por ejemplo)

TABLA1:

DATO1
DATO2
DATO3

TABLA2:

DATO4
DATO5
DATO6

SE ENTIENDE LO QUE QUIERO DECIR? GRACIAS!!!!!
  #17 (permalink)  
Antiguo 10/07/2008, 11:24
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Update Con Alguna Falla ¿cual Es?

Alguien que me socorra please???
  #18 (permalink)  
Antiguo 10/07/2008, 13:24
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Update Con Alguna Falla ¿cual Es?

Código:

Update MiTabla
Set MiCampoAModificar = @MiNuevoValor
Where <MiCondicion>
Solo tienes que identificar cual es la llave o condicion para la actualizacion de cada tabla...

un update por cada tabla, puedes hacer uso de If o cualquier otra sentencia de control para que solo se actualice lo que desee el usuario.



Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:42.