SQL - Update por While

   
Vista:

Update por While

Publicado por OSCAR (1 intervención) el 08/04/2015 16:34:01
Buenas tardes,
Antes de nada decir que necesito ayuda con un problema que tengo, no pido un codigo, solo ayuda para poder finalizar mi tarea.


Tengo una tabla "INCIDENCIASBKP" donde hay un registro de incidencias, solo necesito trabajar con dos campos "GRUPO / RESPONSABLES".

Después tengo otra tabla "GRUPOSUSERS" y los campos son "DA / USUARIO"



incidenciasbkp gruposusers
-------------------- -------------------
grupo da
responsables usuario

Cuando se crea una incidencia en la tabla "INCIDENCIASBKP" se crean todos los datos, y en grupo, el login del usuario.
Es una aplicación externa, con lo cual ese campo no puedo modificarlo por eso e creado otro campo llamado Responsables.

En la tabla Gruposusers el campo da es el link con grupo de incidenciasbkp. Y los datos de Usuario es lo que se insertará en responsables.

E creado algo pero no funciona correctamente ni mucho menos.
Dejo el codigo y explico
1
2
3
4
5
6
7
8
9
10
11
12
13
DECLARE @o INT  = (SELECT COUNT(id) FROM gruposusers)
	DECLARE @i INT = 0;
		WHILE @i < @o
					UPDATE A
	SET
	A.RESPONSABLES =  A.RESPONSABLES + ' ' + B.usuarios
	FROM		incidenciasBKP								A
	INNER JOIN	gruposusersBKP	B ON
	A.GRUPO LIKE '%' + B.da+ '%'
	where A.GRUPO LIKE '%' + B.da+ '%'
		BEGIN;
            SET @i=@i+1;
END;
Declaro @o con todos los gruposusers posibles y @i con valor 0, asi recorreré de 0 hasta todos los grupos.
El update me lo realiza correctamente, el problema está en que si en INCIDENCIASBKP -> GRUPO tengo 3 usuarios, cuando realiza el UPDATE, solo me realiza el UPDATE del primer registro de gruposusers que coincida con el where, y lo inserta 30 veces....

Espero a verme explicado bien.
Muchas gracias de antemano.

Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Update por While

Publicado por leonardo_josue (878 intervenciones) el 09/04/2015 17:39:49
Hola Oscar;

No termino de entender exactamente qué es lo que quieres hacer, creo que es conveniente que además de la estructura de tus tablas, nos pongas algunos datos de ejemplo y a partir de estos datos nos digas qué es lo que estás intentando hacer, así será más factible que podamos ayudarte.

Sin embargo, analizando tu código veo que tienes un error que puede traerte problemas. Observa que cuando haces el INNER JOIN estás colocando una condición LIKE, lo que puede ocasionar que estés generando un producto cartesiano entre las tablas, es decir, en tu consulta tienes esto:

1
2
3
4
5
...
FROM incidenciasBKP A
INNER JOIN	gruposusersBKP	B ON A.GRUPO LIKE '%' + B.da+ '%'
WHERE A.GRUPO LIKE '%' + B.da+ '%'
...

Por lo general, las condiciones de los JOINS SIEMPRE DEBEN SER IGUALACIONES, es decir, algo como esto:

1
2
3
4
5
...
FROM incidenciasBKP A
INNER JOIN	gruposusersBKP	B ON A.GRUPO = B.da
WHERE A.GRUPO LIKE '%' + B.da+ '%'
...

pero esto depende de cómo tienes estructuradas tus tablas. Insisto, si nos pones algunos datos de ejemplo será más fácil entender tu problema.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar