SQL - Duda query...trigger

 
Vista:

Duda query...trigger

Publicado por Lizet (2 intervenciones) el 19/01/2006 19:26:28
Llevo ya un buen rato tratando de hacer este query, mi tabla se llama names, mis campos son los siguientes, id, nombre, apellido, lo que quiero es que me traiga los nombres con apellido que se repiten en la tabla, para eliminarlos, ya hice un cursor, pero quiero hacerlo por query, ademas quiero hacer un trigger que cada vez que se inserte o actualice un registro verifique si ya existe este registro en la tabla, si existe que no lo inserte y me mande un mensaje diciendo que ya existe y que no lo puede insertar. Agradeceré mucho su ayuda.
Gracias
Lizet.
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

RE:Duda query...trigger

Publicado por Isaías (5072 intervenciones) el 19/01/2006 19:46:12
Primero, para ver los repetidos:

SELECT MyCol, COUNT(MyCol)
FROM MyTabla
GROUP BY MyCol
HAVING COUNT(MyCol) > 1

Para eliminar los duplicados, analiza este codigo:

DECLARE @col1 SMALLINT, @col2 INT, @dupcnt INT
declare dups cursor for
SELECT MyCol1, MyCol2, (count(*) - 1) as Duplicates
FROM MyTabla
GROUP BY MyCol1, Mycol2
HAVING count(*) > 1 order by MyCol1, MyCol2

-- Abro mi cursor
OPEN dups
-- Entro al ciclo
WHILE(1=1)
BEGIN
FETCH NEXT FROM dups INTO @col1, @col2, @dupcnt
IF (@@fetch_status < 0)
BREAK -- Rompo el Ciclo
SET rowcount @dupcnt
DELETE MyTabla WHERE MyCol1 = @col1 and MyCol2 = @col2
END
-- Quito mi cursor de la memoria
SET ROWCOUNT 0
DEALLOCATE dups

En cuanto a la validacion de la insercción, declara llaves primarias y bien indices unicos, tambien puedes hacer un IF EXISTS(SELECT...........), para validar la existencia...
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

RE:Duda query...trigger

Publicado por Lizet (2 intervenciones) el 19/01/2006 21:34:02
Muchas gracias por el tip, ahora si me pueden ayudar a hacer el trigger, como son mis primeros pininos en sql, necesito ayuda, ¿como puedo hacer un trigger que cada vez que me inserten un registro o actualicen los datos me revise si ya existe en la tabla y si es asi, me mande un mensaje que diga k ese registro ya existe y por lo tanto no puede insertarlo.?

También como puedo borrar los registros repetidos que tengo en otra tabla sin utilizar un cursor, lo que pasa es que tengo que demostrar que es mejor un query que un cursor porque le cuesta mas con el cursor que con un query .

Muchas gracias por todo, espero me puedan seguir ayudando.
Lizet.
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

RE:Duda query...trigger

Publicado por Isaías (5072 intervenciones) el 19/01/2006 23:43:40
Lizet

Para borrar los duplicados, puedes utilizar la rutina que te envie, o bien, consulta:

http://www.databasejournal.com/features/mssql/article.php/1438651

En cuanto al trigger, deberias hacer un trigger de tipo INSTEAD OF

CREATE TRIGGER tr_Employees_U_insteadof ON Employees INSTEAD OF UPDATE AS
IF EXISTS(SELECT ...........................................................................................)
BEGIN
RAISERROR ('El registro, ya existe', 16, 1)
ROLLBACK TRAN
RETURN
END
ELSE
BEGIN
-- El codigo complementario.....................................
END
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