Hej Använd funktionen TRIGGER_NESTLEVEL() för att se om triggern har triggats av den första triggern (mycket triggers där...) Ett litet snabbhackat exempel som nog kommer att förklara ganska tydligt:hjälp med trigger...
    
    
Jag har två tabeller; MainTable och SecTable. När det görs en insert i SecTable räknas ett värde ner i MainTable. Likaså räknas värdet upp när det görs en delete i SecTable. När det ned värdet räknats ner till noll vill jag omöjliggöra en insert eller rättare sagt vill jag skicka ett felmeddelnade. Så långt är allt okej, men grejen är att det görs ju ändå en insert i SecTable, trots att nedräkningen inte utförs. Jag inser möjligheten att göra en delete på det nya värdet, men då triggas min delete-trigger och då ökas värdet i min mainTable. Det blir alltså också fel.
Vad kan man göra? Kan man göra en rollback på inserten som skedde innan triggern utförs? (jag har ingen sp till detta utan det sker via ado)
Så här ser triggern ut nu:
CREATE TRIGGER SecTableInsert ON [dbo].[SecTable] 
FOR INSERT
AS
DECLARE
	@antalRader int,
	@fel varchar(255),
	@felNummer int,
	@lediga int,
	@secID int
BEGIN
	SELECT @antalRader = @@rowcount 
	SELECT @lediga = MainTable.Lediga FROM MainTable
	
	IF @lediga < @antalRader BEGIN
		SELECT @felNummer = 13000
		SELECT @fel = 'Error! Licenserna är slut.'
		raiserror	@felNummer @fel
	END
	ELSE
	BEGIN
	UPDATE MainTable SET Lediga = Lediga-@antalRader
	FROM inserted, MainTable
	WHERE MainTable.MainID = inserted.MainID
	END
RETURN
errorHandler:
	RAISERROR @felNummer @fel
END
Tack på förhand!
/PeterSv: hjälp med trigger...
    
    
create table foobar (a int, b int)
go
create table barfoo (allowed int)
go
insert into barfoo values (5)
go
CREATE TRIGGER foobar_insert
ON foobar
FOR INSERT
AS 
BEGIN
	DECLARE @num int, @allowed int
	SELECT @num = @@rowcount
	SELECT @allowed = allowed FROM barfoo
	IF @allowed < @num
	BEGIN
		DELETE foobar
		FROM inserted 
		WHERE foobar.a = inserted.a
	END
	ELSE
	BEGIN
		UPDATE barfoo SET allowed = allowed-@num
	END
END
GO
CREATE TRIGGER foobar_delete
ON foobar
FOR DELETE
AS 
BEGIN
	DECLARE	@nestlevel int, @num int
	SELECT @nestlevel = TRIGGER_NESTLEVEL()
	SELECT @num = @@rowcount
	IF @nestlevel > 1
	BEGIN
		PRINT 'Kilroy was here...'
	END
	ELSE
	BEGIN
		UPDATE barfoo SET allowed = allowed+@num
	END
END
GO
/* Ta bort kommentarerna för att testa triggrarna med nedanstående kod
select * from foobar
select * from barfoo
insert into foobar values (1,1)
insert into foobar values (2,1)
insert into foobar values (3,1)
insert into foobar values (4,1)
insert into foobar values (5,1)
select * from foobar
select * from barfoo
insert into foobar values (6,1)
select * from foobar
select * from barfoo
delete from foobar where a = 1
select * from foobar
select * from barfoo
*/