UTNianos

Versión completa: [Gestión de datos] Triggers
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola chicos, tengo la siguiente tabla
create table usuario (
id_usuario primary key identity(1,1),
nombre varchar(50) ,
contraseña varchar(10)
)

entonces hago un insert into usuario (nombre,contraseña) values ('agustin','1234')

quiero hacer un trigger para que no me deje borrar ese registro en sql server.
Alguien sabe como puedo hacerlo? Gracias y saludos !!
Cada vez que se invoca un trigger tenés disponibles las tablas temporales "inserted" y "deleted" con los registros que se están tratando de insertar o eliminar según corresponda.

Entonces podés hacer algo así:

CREATE TRIGGER deleteUser
ON usuario
AFTER DELETE
AS
BEGIN
IF (EXISTS (SELECT 1 FROM deleted WHERE nombre='agustin')) ROLLBACK TRANSACTION
END

Creo que esto estaría bien, saludos!
Si, lo que dice guidok funciona, aunque si querés borrar mas de un nombre a la vez, no te dejaría borrar nada porque haría un rollback de todo.
Podrías probar también:

CREATE TRIGGER trgSaveAgustin ON usuario
INSTEAD OF DELETE
AS
BEGIN
DELETE FROM usuario
WHERE nombre in (select nombre from deleted where nombre not in ('agustin'))
IF EXISTS (SELECT null FROM deleted WHERE nombre in ('agustin'))
print('Se borraron todos los usuarios menos agustin')
END

Si mal no recuerdo, el trigger instead of reempleaza la sentencia que quería ejecutar el usuario y ejecuta el codigo del trigger, entonces en lugar de borrar y despues hacer rollback como lo haría el after, borra los registros omitiendo a agustin.
Supongo que seria útil si tenes varios nombres en el delete.
Joya chicos me re sirvio muchas gracias ! Este pibe guidok es un crack sabe todo siempre!!
URLs de referencia