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

UPDATE que depende de los resultados de un SELECT

Estas en el tema de UPDATE que depende de los resultados de un SELECT en el foro de SQL Server en Foros del Web. Hola. Tengo un problema y quisiera que me ayudarán. Tengo una tabla A: CA CB -- -- 01 AA 02 BB Y una columna B: ...
  #1 (permalink)  
Antiguo 06/01/2011, 13:54
 
Fecha de Ingreso: enero-2011
Mensajes: 3
Antigüedad: 13 años, 3 meses
Puntos: 0
UPDATE que depende de los resultados de un SELECT

Hola. Tengo un problema y quisiera que me ayudarán.
Tengo una tabla A:
CA CB
-- --
01 AA
02 BB


Y una columna B:
CA CB CC Error
-- -- -- ----
01 AA A1 NULL
02 BB B2 NULL
09 MM M9 NULL


La tabla A y B se relacionan por las columnas CA y CB; donde la tabla A es la tabla maestro y B es la tabla detalle.
Las tablas no cuentan con una restrinción de llaves foraneas, ya que la tabla B es una tabla de trabajo.
Código SQL:
Ver original
  1. CREATE TABLE #A (
  2. CA VARCHAR(2),
  3. CB VARCHAR(2)
  4. )
  5. --
  6. CREATE TABLE #B (
  7. CA VARCHAR(2),
  8. CB VARCHAR(2),
  9. CC VARCHAR(2),
  10. ERROR VARCHAR(2)
  11. )
  12. --
  13. INSERT INTO #A VALUES ('01', 'AA')
  14. INSERT INTO #A VALUES ('02', 'BB')
  15. --
  16. INSERT INTO #B VALUES ('01', 'AA', 'A1', NULL)
  17. INSERT INTO #B VALUES ('02', 'BB', 'B2', NULL)
  18. INSERT INTO #B VALUES ('09', 'MM', 'M9', NULL)
Con esas tablas si se realiza el siguiente query
Código SQL:
Ver original
  1. SELECT * FROM #B b LEFT JOIN #A a ON b.CA = a.CA AND  b.CB = a.CB
  2. WHERE a.CA IS NULL
Se obtienen los registros que no cumplen con la restrincion

La pregunta es, ¿como puedo hacer un UPDATE a la tabla B con los registros que cumplan en el SELECT?

Saludos!
  #2 (permalink)  
Antiguo 06/01/2011, 15:22
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: UPDATE que depende de los resultados de un SELECT

Buenas Tardes Deazu, no entendí qué es lo que necesitas actualizar en tu tabla B. Al ejecutar la consulta que colocaste en tu post el resultado es el siguiente:

Código:
CA|CB|CC|ERROR|CA|CB
-------------------------------
09|MM|M9|NULL|NULL|NULL
Este resultado para que te sirve??? o que es lo que pretendes cambiar??? Sería conveniente que nos digas cómo es que debe quedar tu tabla B después de las actualizaciones para tratar de ayudarte.

Saludos
Leo.
  #3 (permalink)  
Antiguo 06/01/2011, 15:48
 
Fecha de Ingreso: enero-2011
Mensajes: 3
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: UPDATE que depende de los resultados de un SELECT

Gracias leonardo_josue por tu interés de ayudarme. La tabla B debe de quedar de la siguiente forma
Código:
CA	CB	CC	Error
--	--	--	----	
01	AA	A1	NULL
02	BB	B2	NULL
09	MM	M9	ERROR
Saludos
  #4 (permalink)  
Antiguo 06/01/2011, 16:27
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: UPDATE que depende de los resultados de un SELECT

EL update lo puese hacer asi

update tabla
set dato=cosa
from
(SELECT * FROM #B b LEFT JOIN #A a ON b.CA = a.CA AND b.CB = a.CB
WHERE a.CA IS NULL)
  #5 (permalink)  
Antiguo 06/01/2011, 16:29
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: UPDATE que depende de los resultados de un SELECT

Hay una observación que tengo que hacer y es que en la declaración de tu tabla temporal el campo ERROR está declarado como un varchar(2) por lo que es imposible introducir la palabra "ERROR" en dicho campo ya que se truncaría la cadena y por lo tanto marcaría un error de SQL, supongo que se trato de un error al copiar la consulta.

Intenta con esto_

Código SQL:
Ver original
  1. UPDATE #B SET ERROR = 'ERROR'
  2. FROM #B B LEFT JOIN #A A ON B.CA = A.CA AND B.CB = A.CB
  3. WHERE A.CA IS NULL

De hecho tal vez te convenga dejar este campo como tipo BIT, con valor por defecto 0 y 1 en caso de haber error, pero eso es cuestión de tu lógica de negocio.

Saludos
Leo.
  #6 (permalink)  
Antiguo 06/01/2011, 22:52
 
Fecha de Ingreso: enero-2011
Mensajes: 3
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: UPDATE que depende de los resultados de un SELECT


Gracias por su apoyo, Libras y leonardo_josue.
Por cierto leonardo_josue, es por la lógica del negocio, que la columna de error no es bit. Se manejan varios códigos de error.

Etiquetas: sql, trans, update
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 01:59.