A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Manejo de errores en trigger

14/31
Recursos

Aportes 7

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Trigger que valida si el nombre tiene mas de 15 car谩cteres o si el puntaje es mayor a 100:

ALTER TRIGGER tr_Update ON UsuarioTarget
AFTER UPDATE
AS
BEGIN
	IF (ROWCOUNT_BIG() = 0)
		RETURN;

	DECLARE @Nombre NVARCHAR(50)
	DECLARE @Puntos INT

	SELECT @Nombre = Nombre, @Puntos = Puntos FROM INSERTED

	IF LEN(@Nombre) > 15
	BEGIN
		PRINT 'El nombre es muy largo. M谩ximo 15 car谩cteres.'
		ROLLBACK
		RETURN
	END

	IF @Puntos > 100
	BEGIN
		PRINT 'El puntaje m谩ximo es de 100'
		ROLLBACK
		RETURN
	END

	PRINT 'Se realiz贸 el Update'

END

La informaci贸n del nombre debe tener al menos 3 caracteres.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER   TRIGGER [dbo].[t_update] 
   ON  [dbo].[UsuarioTarget]
   AFTER UPDATE
AS 
BEGIN

	IF (ROWCOUNT_BIG() = 0)
	RETURN;

	DECLARE @codigo int
	SELECT @codigo = len(nombre) FROM inserted

	IF @codigo < 3
	BEGIN
		Print 'NO se realiz贸 un update. no es un nombre valido'
		ROLLBACK;
		RETURN;
	END
	
	-- SELECT Codigo, Nombre, Puntos from inserted
	
	Print 'Se realiz贸 un update'

END


GO

Deben tener en cuenta que en una tabla con Triggers no podemos usar el MERGE.

CREATE OR ALTER TRIGGER t_update
ON UsuarioTarget
AFTER UPDATE
AS
BEGIN
IF(ROWCOUNT_BIG() = 0)
RETURN;

DECLARE @codigo int
SELECT @codigo = codigo from inserted

if @codigo > 8
	BEGIN 
		print 'no se realizo el update'
		ROLLBACK;
		RETURN;
	END

--SELECT Codigo, Nombre, Puntos
	--FROM INSERTED

Print 'Se realizo el UPDATE'
END

Reto:

--RETO: Crear una condici贸n que no permita hacer un UPDATE

/*En este caso no se realizar谩 el UPDATE si se quiere cambiar
el nombre a Carlos Ramirez*/

CREATE OR ALTER TRIGGER t_update
ON UsuarioTarget
AFTER UPDATE
AS
BEGIN
	IF(ROWCOUNT_BIG() = 0)
		RETURN;

	DECLARE @nombre varchar(100)
	SELECT @nombre = Nombre FROM inserted

	IF(@nombre = 'Carlos Ramirez')
		BEGIN
			PRINT 'No se realiz贸 el UPDATE'
			ROLLBACK;
			RETURN;
		END
	
	/*SELECT Codigo,Nombre, Puntos
	FROM INSERTED --Se usa el INSERTED*/

	PRINT 'Se realiz贸 el Update'
END

La modificaci贸n del trigger update.

ALTER   TRIGGER [dbo].[t_update] 
   ON  [dbo].[UsuarioTarget]
   AFTER  UPDATE
AS 
BEGIN

	IF (ROWCOUNT_BIG() = 0)
	RETURN;

	DECLARE @puntos int
	SELECT @puntos = puntos FROM inserted

	IF @puntos >=20
	BEGIN
		Print 'No se realiz贸 un update -  Puntos debe ser menor igual a 20'
		ROLLBACK;
		RETURN;
	END
	
	-- SELECT Codigo, Nombre, Puntos from inserted
	
	Print 'Se realiz贸 un update'

END

create or alter trigger t_update
on dbo.UsuarioSource
after update
as
begin

if (ROWCOUNT_BIG() = 0)
	return;

declare @nombre varchar(200)
select @nombre = Nombre from inserted

if (len(@nombre)=0)
begin
	print 'Se requiere un Nombre'
	rollback;
	return;
	
end

print 'Nombre actualizado'

end