verwendetes Datenbanksystem: MS SQL 2012
Hallo zusammen,
ich habe mir mehrere Prozeduren geschrieben, die in einem After Insert Trigger aufgerufen werden, je nachdem welcher Datensatz aktualisiert werden muss.
Auf dem Rechner, wo ich das ganze entwickelt habe wird alles ohne Probleme ausgeführt.
Nun habe ich die Datenbank auf einem Server erstellt und versucht mehrere Datensätze einzufügen und bekomme die Meldung, dass die maximale Schachtelungsebene überschritten wurde.
Auf der Fehlersuche habe ich gesehen, dass sich Update-Trigger unendlich aufrufen und sowas auslösen können, aber der reagiert nur auf Insert.
Hier mal ein kleiner Ausschnitt:
BEGIN
declare @tmpProtocolNo nvarchar(50)
declare @tmpReceiverNo nvarchar(50)
declare @counter int
SET NOCOUNT ON;
select @tmpProtocolNo = (select top 1([Protocol No_]) from inserted order by No_)
select @tmpReceiverNo = (select top 1(No_) from inserted order by No_)
select @counter = (select top 1(convert(int,substring(@tmpReceiverNo,5,16))) from inserted order by No_)
-- Für alle Zeilen der Tabelle
while (select @counter) is not null
begin
--Artikel
if (select @tmpProtocolNo) = 'IF00010884'
begin
if (select Article_No from Article where Article_No = (select rtrim(substring([Message Part 01],1,50)) from GHV_Receiver_intern where [Protocol No_] = 'IF00010884' and No_ = @tmpReceiverNo)) is null
EXEC p_InsertArticle @tmpProtocolNo, @tmpReceiverNo
else
exec p_UpdateArticle @tmpProtocolNo, @tmpReceiverNo
end
select @tmpProtocolNo = (select top 1([Protocol No_]) from inserted where convert(int,substring(No_,5,16)) > @counter order by No_)
select @tmpReceiverNo = (select top 1(No_) from inserted where convert(int,substring(No_,5,16)) > @counter order by No_)
select @counter = (select top 1(convert(int,substring(@tmpReceiverNo,5,16))) from inserted where convert(int,substring(No_,5,16)) > @counter order by No_)
end
Das ist der erste Fall. Innerhalb der beiden Prozeduren wird eine andere aufgerufen und SQL-interne Funktionen, die man eben so braucht.
Ich weiß nicht genau, was ihr für Informationen braucht, um eine Idee zu haben, was das Problem sein könnte...
Wie gesagt in der Ursprungstabelle funktioniert alles.
Gibt es eventuell Einstellungen, die man machen müsste?
Vielen Dank schonmal
Hi,
naja - die Fehlermeldung klingt recht eindeutig im Zusammenhang mit der MSDN.
Die maximale Verschachtelungstiefe ist per Default wohl bei 32 - und du würdest damit drüber kommen, weshalb das Ding abgewürgt wird.
Du kannst jetzt zwar sicher versuchen @@NESTLEVEL anzuheben - vermuten würde ich allerdings doch eher, dass hier eine Endlosschleife gebaut wurde. Würde somit mal schauen was sich hier so oft aufruft...
Nach all den beteiligten Procedures und Triggern frag ich nicht mal - denn sobald du alle Beteiligten gefunden hast löst sich das Problem wahrscheinlich fast von allein 😉
LG
Hey Taipi88,
ich dachte erst wirklich, dass es unlogisch ist die Prozeduren zu durchsuchen, wenn es auf einem anderen System funktioniert.
Deine Antwort macht aber ziemlich deutlich, dass es keine andere Fehlerquelle gibt und so ist es auch.
Hatte die ganzen Prozeduren über die gespeicherten Skripte erstellt auf dem Server.
In einem der Skripte hatte ich vergessen einen Testaufruf der Prozedur auszukommentieren. Sie hatte sich also unendlich oft selbst aufgerufen.
Vielen Dank für den Schubs in die richtige Richtung 😉.
Liebe Grüße
Reggi