2012-03-01 99 views
1

當該觸發器被觸發,這是包含在下面的代碼塊觸發器嵌套級別超出了?

alter TRIGGER [dbo].[locations_update_geometry_After] 
ON dbo.TBL_LOCATIONS 
for update 
AS 
    INSERT dbo.TBL_LOCATIONS(SHAPE, X_Coord, Y_Coord,objectid) 
    SELECT a.Shape, a.X_Coord, a.Y_Coord, a.objectid 
    FROM 
    ( 
    SELECT 
     SHAPE = CASE WHEN SHAPE IS NOT NULL 
     THEN SHAPE ELSE Geometry::STPointFromText('POINT(' 
      + CAST(X_Coord AS VARCHAR(20)) + ' ' 
      + CAST(Y_Coord AS VARCHAR(20)) + ')', 26917) END, 
     X_Coord = CASE WHEN SHAPE IS NULL THEN X_Coord ELSE SHAPE.STX END, 
     Y_Coord = CASE WHEN SHAPE IS NULL THEN Y_Coord ELSE SHAPE.STY END, 
     objectid 
    FROM inserted 
) AS a 

我得到以下錯誤消息:

無法保存編輯。潛在的DBMS錯誤[Microsoft SQL Server 本機客戶端10:最大存儲過程,函數,觸發器或查看 嵌套級別超出(限制32)。

我沒有32個與此表相關的任何東西。有任何想法嗎?

回答

4

是的,觸發器在投擲消息前執行32次;爲了阻止這樣做,使用這種

IF ((
SELECT TRIGGER_NESTLEVEL()) > 1) 
RETURN 
+0

我有同樣的錯誤,但它不喜歡我在其他觸發我的數據庫我應該在哪裏插入這個聲明? – Andrey 2013-03-05 02:39:40