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

Update Un Poco Complicado ¿como Hago?

Estas en el tema de Update Un Poco Complicado ¿como Hago? en el foro de SQL Server en Foros del Web. Hola AMIGUETES DEL FORO, encontre una nueva forma de martirizarlos con una nueva consulta que quiero hacerles, necesito traer varios datos de vairas tablas, y ...
  #1 (permalink)  
Antiguo 19/05/2008, 12:51
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Update Un Poco Complicado ¿como Hago?

Hola AMIGUETES DEL FORO, encontre una nueva forma de martirizarlos con una nueva consulta que quiero hacerles, necesito traer varios datos de vairas tablas, y a su vez deseo poder hacer un UPDATE de algunos y solo algunos de los campos de estas tablas, obviamente aceptan valores nulos en el caso de querer que quede alguno vacio, las tablas son PERSONAL, DATOS_SECUNADRIOS Y NACIMIENTO, les dejo una solucion que me pasaron, aunque no me sirve porque si o si debo completar todos los campos solicitados

-----------------------------------------------------
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[SP_CARGA_DE_DATOS]

@apellido varchar(20),
@nombre varchar(20),
@dni int,
@sexo varchar(20),
@cipfa int,
@f_nacimiento smalldatetime,
@p_nacimiento varchar(50)

AS

DECLARE @vTextoError varchar(200)
DECLARE @idPersonal int

--Comienzo la transacción
BEGIN TRANSACTION

--Agrego registro en la tabla Personal
INSERT INTO PERSONAL (apellido, nombres, dni)
VALUES (@apellido, @nombre, @dni)

IF @@error <> 0
begin
set @vTextoError = 'No se pudo insertar en la tabla Personal'
raiserror 50001 @vTextoError
rollback transaction
return
end

--Guardo el nro. de id insertado
SET @idPersonal = @@identity

--Agrego registro en la tabla Datos_Secundarios
INSERT INTO DATOS_SECUNDARIOS (sexo, cipfa, id_personal)
VALUES (@sexo, @cipfa , @idPersonal)

IF @@error <> 0
begin
set @vTextoError = 'No se pudo insertar en la tabla datos_secundarios'
raiserror 50001 @vTextoError
rollback transaction
return
end

--Agrego registro en la tabla nacimiento
INSERT INTO NACIMIENTO (fecha_nacimiento, provincia_nacimiento, id_personal)
VALUES (@f_nacimiento, @p_nacimiento, @idPersonal)

IF @@error <> 0
begin
set @vTextoError = 'No se pudo insertar en la tabla nacimiento'
raiserror 50001 @vTextoError
rollback transaction
return
end

COMMIT TRANSACTION
___________________________
DESDE YA LES AGRADEZCO POR ANTICIPADO SUS RESPUESTAS, GRACIAS!!!
  #2 (permalink)  
Antiguo 19/05/2008, 13:18
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Update Un Poco Complicado ¿como Hago?

No se comprende, si desea que algunos datos queden vacios, no envie el valor en la variable correspondiente y haga

ISNULL(@VARIABLE, '')

Saludos.
  #3 (permalink)  
Antiguo 19/05/2008, 14:30
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Update Un Poco Complicado ¿como Hago?

HOLA IISLAS !!!! Como siempre un maestro en el tema!!!, pero yo soy bastante principiante y no entiendo donde meterlo ese codigo ni como se usa, los datos que me dieron y que trascribi son unos que me pasaron como ayuda, y por lo visto es un insert con una validacion de datos debajo, pero nada mas, y si yo no llego a agregar el apellido, por ejemplo no anda nada, y tengo que poner todos estos datos, pero estos datos se van a ver en una planilla y se van a cargar datos en algunos casilleros y no en todos entonces lo que me dieron no sirve, me puedes ayudar??? Como siempre te agradezco MAESTRO!!!
  #4 (permalink)  
Antiguo 20/05/2008, 14:35
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Update Un Poco Complicado ¿como Hago?

Por favor si alguien me puede ayudar, ya que no se implementar la solucion que me dio IIslas, porque no se donde meter ese codigo ni entiendo como funciona, porque soy autodidacta y quizas no me haya expresado bien en lo que tenia que pedir.
  #5 (permalink)  
Antiguo 20/05/2008, 17:09
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Update Un Poco Complicado ¿como Hago?

Veamos, si yo quiero que algunos datos queden VACIOS ('') en mi tabla, ya que las variables pueden venir en NULL y mi tabla acepta NULOS, entonces puedo hacer 2 cosas.

En las propiedades de mis columnas en mi tabla, coloco como DEFAULT un blanco o lo que yo quiera que se guarde si el usuario no proporciona la informacion y le digo a la columna QUE NO ACEPTE NULOS.

O bien, en el insert, valido que si es nulo el valor de la variable, me ponga un valor "x", ejemplo:

-- AMaterno, Religion y Estudios, pueden venir en NULL
INSERT INTO myTabla (Nombre, APaterno, AMaterno, Religion, Estudios)
VALUES (@Nombre, @APaterno, ISNULL(@AMaterno, 'Sin apellido'), ISNULL(@Religion, 'Sin religion'), ISNULL(@Estudios, 'Sin estudios'))

Claro esta que, esos valores "default", podria haberlos puesto en mi defincion de tabla.

¿Quedo mas claro?
  #6 (permalink)  
Antiguo 21/05/2008, 15:51
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Update Un Poco Complicado ¿como Hago?

Si, muchas gracias por el ejemplo, ahi lo pude ver, PERO SIGO CON UNA DUDA, ahi inserto unos valores en unos campos X, pero si en el mismo ejemplo de antes, quiero MODIFICAR ya no solo insertar por primera vez y quiero que me mantenga los valores cargados en los otros campos sin modificarse, es lo mismo? porque de esta manera insertaria unos valores default en ciertos campos pero no mantengo el valor que poseia antes, si es distinto en este caso, me mostrarias como hacerlo? la verdad, TE AGRADEZCO MUCHO LA PACIENCIA QUE ME TENES PORQUE LAS EXPLICACIONES TIENEN QUE SER MUY SIMPLES, PORQUE NO SE MUCHO, PERO SE NOTA QUE HAY ALMA DE PROFE POR AHI. GRACIAS.
  #7 (permalink)  
Antiguo 23/05/2008, 13:54
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Update Un Poco Complicado ¿como Hago?

Si hablas de un UPDATE, solo afectara aquellos campos que vengan con NULL, ademas, solo se afectan los campos mencionados en el SET..........

Suponiendo que tengo una tabla con 3 campos, NOMBRE, APATERNO, AMATERNO y quiero modificar los nombres que se insertaron como MA EUGENIA por MARIA EUGENIA

UPDATE TABLA SET NOMBRE = 'MARIA EUGENIA' WHERE NOMBRE = 'MA EUGENIA'

Los campos APATERNO y AMATERNO se mantendran con los valores originales.

¿A eso te refieres?, ¿es es tu duda?
  #8 (permalink)  
Antiguo 24/05/2008, 21:26
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Update Un Poco Complicado ¿como Hago?

Cita:
Iniciado por lanzi Ver Mensaje
Si, muchas gracias por el ejemplo, ahi lo pude ver, PERO SIGO CON UNA DUDA, ahi inserto unos valores en unos campos X, pero si en el mismo ejemplo de antes, quiero MODIFICAR ya no solo insertar por primera vez y quiero que me mantenga los valores cargados en los otros campos sin modificarse, es lo mismo? porque de esta manera insertaria unos valores default en ciertos campos pero no mantengo el valor que poseia antes, si es distinto en este caso, me mostrarias como hacerlo? la verdad, TE AGRADEZCO MUCHO LA PACIENCIA QUE ME TENES PORQUE LAS EXPLICACIONES TIENEN QUE SER MUY SIMPLES, PORQUE NO SE MUCHO, PERO SE NOTA QUE HAY ALMA DE PROFE POR AHI. GRACIAS.
soy principiante tambien, pero lo que entendi es que quieres modificar cualquier campo de tus tablas; esto puede ser, modificar el primero, en otro momento modificar el 3ro y el cuarto por ejemplo; repito no se mucho y tambien depende si trabajs con un datagridwiew o lo que sea.
mi solucion, obtengo los campos, elimino el registro de la tabla e inserto nuevamente pero con los valores actuales(asi cambio los campos que quiero desde mi aplicacion y los demas se quedaran intactos).


por favor si hay una solucion mas optima, postearla, yo tuve el mismo problema y termine haciendolo de la manera anterior, pero se quiere rendimiento tambien y lo antes expuesto me parece no es nada optimo.
  #9 (permalink)  
Antiguo 27/05/2008, 17:51
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Update Un Poco Complicado ¿como Hago?

Cita:
Iniciado por X_fran Ver Mensaje
soy principiante tambien, pero lo que entendi es que quieres modificar cualquier campo de tus tablas; esto puede ser, modificar el primero, en otro momento modificar el 3ro y el cuarto por ejemplo; repito no se mucho y tambien depende si trabajs con un datagridwiew o lo que sea.
mi solucion, obtengo los campos, elimino el registro de la tabla e inserto nuevamente pero con los valores actuales(asi cambio los campos que quiero desde mi aplicacion y los demas se quedaran intactos).


por favor si hay una solucion mas optima, postearla, yo tuve el mismo problema y termine haciendolo de la manera anterior, pero se quiere rendimiento tambien y lo antes expuesto me parece no es nada optimo.

Si, es lo que quisiera hacer, lo que hiciste vos, pero me podrias poner un codigo de ejemplo? como ya mencione antes me cuesta interpretar algo si no lo veo porque no me explico como poder hacerlo, y si puedo lograr hacer esto desde el sql o tengo que ejecutarlo desde otro lado
  #10 (permalink)  
Antiguo 27/05/2008, 20:53
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Update Un Poco Complicado ¿como Hago?

Haber eso depende, yo lo que hice fue un aplicacion de escritorio, y en los campos donde queria insertar, pues ahi mismo obtenia los datos referentes a cada campo, por ejemplo, tengo 3 campos: nombreUsuario, nombre, numeroIdentiad.
Introduzco un nombre de usaurio, hago una busqueda en mi BD (SELECT nombreUsuario, nombre, numeroIdentidad FROM T_Usuario WHERE T_Usuario.numeroIdentidad = @varNumIdent ), asi ya tendras los datos, solo tienes que distribuirlos por los campos que le corresponde de tu aplicacion.

Luego borras la tupla anterior de la BD (DELETE FROM T_Usuario WHERE numeroIdentidad = "varNumId).

desde tu aplicacion cambias los valores que deseas en los campos que desees y vuelves a insertar pero con los nuevos valores (INSERT INTO T_Usuario (nombreUsuario, nombre, numeroIdentiad) VALUES @nombreUsuario, @nombre, @numeroIdentiad. )

Aunque la manera mas sencilla es a traves de una grilla pero eso ya depende del lenguaje de programacion en el que desarrolles tu aplicacion, o si estas usando frameworks para el ORM pues es mas sencillo la parte de consultas.
  #11 (permalink)  
Antiguo 11/06/2008, 12:58
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Update Un Poco Complicado ¿como Hago?

Holas de nuevo, les muestro la simpleza de lo que quiero hacer que es hasta donden llegue hasta ahora y les comento donde falla o erra mi procedimiento:

setANSI_NULLSON
set
QUOTED_IDENTIFIERON
go


ALTERPROCEDURE [dbo].[SP_CARGA_DE_DATOS_EN_DEPCIA]

@id
int,
@dpcia
varchar(255) --SI ACA INSERTO UN VALOR, POR EJEMPLO
-- @dpcia varchar(255) = xxxxx SE CARGA EL
--VALOR xxxx PERO COMO UN STRING, NO xxxx
--COMO xxxx QUE ES EL NOMBRE DE UN CAMPO DE
--UNA DE LA TABLA QUE QUIERO QUE MANTENGA EL
--VALOR

@area varchar(16),
@division varchar(70),
@dpto varchar(60),
AS
/*SELECT
@dpcia = DEPENDENCIA,
@area = AREA_CORRESPONDIENTE,
@division = DIVISION,
@dpto = DEPARTAMENTO,

FROM DEPENDENCIAS
WHERE Id_Cod_Dpcia = @id
*/

UPDATE
DEPENDENCIAS
SET
DEPENDENCIA = @dpcia,
AREA_CORRESPONDIENTE = @area,
DIVISION = @division,
DEPARTAMENTO = @dpto,

WHERE
Id_Cod_Dpcia = @id



GRACIAS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  #12 (permalink)  
Antiguo 12/06/2008, 10:57
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Update Un Poco Complicado ¿como Hago?

Por Si No Quedo Lo Suficientemente Claro, Lo Que Yo Quiero Es Introducir El Valor De Un Campo Y No Un String En Particular, Les Mando Un Abrazo A Todos Y Gracias Por Las Respuestas!!!!!!
  #13 (permalink)  
Antiguo 13/06/2008, 12:45
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Update Un Poco Complicado ¿como Hago?

con respecto al codigo anterior, mi duda es como hacer que en el mismo procedimiento, me muestre primero el valor en los campo y luego poder modificar el que desee y que el resto de los valores permanezcan como antes por medio de una variable que resguarde esos valores, les muestro hasta donde llegue, le spido por favor me ayuden, GRACIAS GENTE!!!!!

setANSI_NULLSON
set
QUOTED_IDENTIFIER
ON
go


ALTERPROCEDURE [dbo].[SP_CARGA_DE_DATOS_EN_DEPCIA]

@id int,
@dpcia varchar(255) --SI ACA INSERTO UN VALOR, POR EJEMPLO

-- @dpcia varchar(255) = xxxxx SE CARGA EL
--VALOR xxxx PERO COMO UN STRING, NO xxxx
--COMO xxxx QUE ES EL NOMBRE DE UN CAMPO DE
--UNA DE LA TABLA QUE QUIERO QUE MANTENGA EL
--VALOR

@area varchar(16),
@division varchar(70),
@dpto varchar(60),
AS

UPDATE
DEPENDENCIAS
SET
DEPENDENCIA = @dpcia,
AREA_CORRESPONDIENTE = @area,
DIVISION = @division,
DEPARTAMENTO = @dpto,

WHERE
Id_Cod_Dpcia = @id
  #14 (permalink)  
Antiguo 13/06/2008, 14:22
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Update Un Poco Complicado ¿como Hago?

Código:
ALTERPROCEDURE [dbo].[SP_CARGA_DE_DATOS_EN_DEPCIA]

@id int, 
@dpcia varchar(255) --SI ACA INSERTO UN VALOR, POR EJEMPLO 
-- @dpcia varchar(255) = xxxxx SE CARGA EL 
--VALOR xxxx PERO COMO UN STRING, NO xxxx 
--COMO xxxx QUE ES EL NOMBRE DE UN CAMPO DE 
--UNA DE LA TABLA QUE QUIERO QUE MANTENGA EL 
--VALOR 

@area varchar(16), 
@division varchar(70), 
@dpto varchar(60), 
AS

UPDATE DEPENDENCIAS 
SET
DEPENDENCIA = isnull(@dpcia,Dependencia),
AREA_CORRESPONDIENTE = isnull(@area,AREA_CORRESPONDIENTE),
DIVISION = isnull(@division,DIVISION),
DEPARTAMENTO = isnull(@dpto,DEPARTAMENTO),

WHERE Id_Cod_Dpcia = @id
De esta forma, si no tienes a tu disposicion todos los campos de la tabla, envialos en nulo y cuando sea nulo el parametro enviado, se tomaria el valor que esta en la base de datos, es decir, solo se actualizarian aquellos campos cuyos parametros sean diferente de nulo...

Espero te sirva, 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.
  #15 (permalink)  
Antiguo 19/06/2008, 12:10
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Update Un Poco Complicado ¿como Hago?

Les Agradezco!!! Pude Solucionar Mi Problema Una Vez Mas Gracias A Todos Los Que Contestaron Mi Pregunta Y Seguramente Nos Veremos Pronto Con Una Nueva "duda Existencial"
  #16 (permalink)  
Antiguo 19/06/2008, 13:27
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Update Un Poco Complicado ¿como Hago?

Y la solución fue....?

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.
  #17 (permalink)  
Antiguo 20/06/2008, 15:10
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Update Un Poco Complicado ¿como Hago?

La solucion fue la que vos pusiste!!! gracias a tu ayuda, pude empezar a implementarlo aunque al hacer el UPDATE en varias tablas todavia no lo pude hacer funcionar, podrias modificar el codigo para que modifique varios campos de varias tablas? Te agradezco las soluciones!!!
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

SíEste tema le ha gustado a 1 personas




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