UTNianos

Versión completa: TRES CONSULTAS T-SQL
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas a todos, me estoy preparando para dar por 1ra vez este final, si llego el próximo martes. Me surgen un par de dudas. La verdad que ando corto de tiempo y no me puse a probarlo en el ms-sql. Espero que me puedan responder, voy a tratar de ser lo mas claro posible. Gracias

CONSULTA #1

SELECT ATRIBUTO1, UPPER(ATRIBUTO2) AS COSA
FROM TABLA

WHERE ATRIBUTO2 || UPPER(ATRIBUTO2) || COSA
GROUP BY ATRIBUTO2 || UPPER(ATRIBUTO2) || COSA
HAVING ATRIBUTO2 || UPPER(ATRIBUTO2) || COSA
ORDER BY ATRIBUTO2 || UPPER(ATRIBUTO2) || COSA

¿CUAL/ES ES/SON VALIDO/S EN EL WHERE, GROUP BY, HAVING, ORDER BY?

CONSULTA #2

¿TABLA "DELETED" ESTA EN UTILIZABLE EN LE CONTEXTO DE UN TRIGGER EN EL AFTER UPDATE? (LO TENGO EN LA CARPETA ASÍ PARECIDO)

CREATE TRIGGER TRG_TALITA ON CLIENTES
AFTER UPDATE AS

BEGIN
IF (SELECT COUNT(*) FROM DELETED WHERE CLIE_ATA IS NOT NULL) > 0
ROLLBACK TRANSACTION
END


CONSULTA #3

¿INSERTED & DELETED, AL CONSULTARLAS GUARDAN UN REGISTRO O VARIOS (TABLA)?

<<TENIENDO EN CUENTA QUE UN TRIGGER SE EJECUTA EN UN EVENTO UPDATE, DELETE O INSERT, TANTAS VECES COMO REGISTROS AFECTADOS>>

si Inserted contiene solo un registro, no veo sentido a este ejemplo
CREATE TRIGGER... AFTER UPDATE
IF (SELECT COUNT(*) FROM INSERTED ins WHERE ins.CAMPO = TRUE) > 0
ROLLBACK TRANSACTION
yo preferiría
CREATE TRIGGER... AFTER UPDATE
IF (SELECT 1 FROM INSERTED ins WHERE ins.CAMPO = TRUE) = 1
ROLLBACK TRANSACTION

si es una tabla Inserted este otro ejemplo no me cierra, porque estaría intentando insertar duplicados por cada vez que se ejecuta el trigguer
o sea si intento insertar 50 registros en una tabla X y por cada vez que inserta se ejecuta este trigger asociado a la tabla X,
la tabla Inserted va a llegar a los 50 registros, pero por cada registro que se inserto graba esa tabla Inserted en la tabla Bancos
INSTEAD OF INSERT // "EN LUGAR DE"
INSERT INTO BANCOS
SELECT * FROM INSERTED
(16-02-2017 01:32)Charly_18 escribió: [ -> ]Buenas a todos, me estoy preparando para dar por 1ra vez este final, si llego el próximo martes. Me surgen un par de dudas. La verdad que ando corto de tiempo y no me puse a probarlo en el ms-sql. Espero que me puedan responder, voy a tratar de ser lo mas claro posible. Gracias

CONSULTA #1

SELECT ATRIBUTO1, UPPER(ATRIBUTO2) AS COSA
FROM TABLA

WHERE ATRIBUTO2 || UPPER(ATRIBUTO2) || COSA
GROUP BY ATRIBUTO2 || UPPER(ATRIBUTO2) || COSA
HAVING ATRIBUTO2 || UPPER(ATRIBUTO2) || COSA
ORDER BY ATRIBUTO2 || UPPER(ATRIBUTO2) || COSA

¿CUAL/ES ES/SON VALIDO/S EN EL WHERE, GROUP BY, HAVING, ORDER BY?

CONSULTA #2

¿TABLA "DELETED" ESTA EN UTILIZABLE EN LE CONTEXTO DE UN TRIGGER EN EL AFTER UPDATE? (LO TENGO EN LA CARPETA ASÍ PARECIDO)

CREATE TRIGGER TRG_TALITA ON CLIENTES
AFTER UPDATE AS

BEGIN
IF (SELECT COUNT(*) FROM DELETED WHERE CLIE_ATA IS NOT NULL) > 0
ROLLBACK TRANSACTION
END


CONSULTA #3

¿INSERTED & DELETED, AL CONSULTARLAS GUARDAN UN REGISTRO O VARIOS (TABLA)?

<<TENIENDO EN CUENTA QUE UN TRIGGER SE EJECUTA EN UN EVENTO UPDATE, DELETE O INSERT, TANTAS VECES COMO REGISTROS AFECTADOS>>

si Inserted contiene solo un registro, no veo sentido a este ejemplo
CREATE TRIGGER... AFTER UPDATE
IF (SELECT COUNT(*) FROM INSERTED ins WHERE ins.CAMPO = TRUE) > 0
ROLLBACK TRANSACTION
yo preferiría
CREATE TRIGGER... AFTER UPDATE
IF (SELECT 1 FROM INSERTED ins WHERE ins.CAMPO = TRUE) = 1
ROLLBACK TRANSACTION

si es una tabla Inserted este otro ejemplo no me cierra, porque estaría intentando insertar duplicados por cada vez que se ejecuta el trigguer
o sea si intento insertar 50 registros en una tabla X y por cada vez que inserta se ejecuta este trigger asociado a la tabla X,
la tabla Inserted va a llegar a los 50 registros, pero por cada registro que se inserto graba esa tabla Inserted en la tabla Bancos
INSTEAD OF INSERT // "EN LUGAR DE"
INSERT INTO BANCOS
SELECT * FROM INSERTED

Para la CONSULTA #1, depende que es lo que quieras hacer, pero el correcto es el UPPER(ATRIBUTO2) para todos. Porque el AS es como vos renombrarías a la columna y el WHERE ES sobre campos ya sean calculados o no.

Para la CONSULTA #2 es correcto la tabla Deleted. Internamente el motor SQL al momento de disparar el trigger de Update "elimina el registro" y lo inserta con los nuevos campos modificados, por lo que existen ambas tablas. Deleted e Inserted.

Para la CONSULTA #3 tecnicamente en la tabla Inserted se almacenan todos los elementos insertados, puede ser 1 si se inserta con Values o muchos con el Insert Into.
URLs de referencia