Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
TRES CONSULTAS T-SQL
Autor Mensaje
Charly_18 Sin conexión
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 59
Agradecimientos dados: 9
Agradecimientos: 5 en 1 posts
Registro en: Aug 2013
Mensaje: #1
TRES CONSULTAS T-SQL Dudas y recomendaciones y 1 más Gestión de Datos
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
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Martin. Sin conexión
Presidente del CEIT
Enjoy it !
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.353
Agradecimientos dados: 85
Agradecimientos: 241 en 125 posts
Registro en: Oct 2011
Mensaje: #2
RE: TRES CONSULTAS T-SQL
(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.

[Imagen: jQJfyBGh9SOmZ.png]
16-02-2017 09:53
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.