(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.