Уровень вложенности триггера превышен? - PullRequest
1 голос
/ 02 марта 2012

Когда срабатывает этот триггер, который содержится в приведенном ниже кодовом блоке

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

Я получаю следующее сообщение об ошибке:

Невозможно сохранить изменения.Основная ошибка СУБД [Собственный клиент Microsoft SQL Server 10: превышен максимальный уровень вложенности хранимой процедуры, функции, триггера или представления (ограничение 32).

У меня нет 32 объектов, связанных с этой таблицей.есть идеи?

Ответы [ 2 ]

4 голосов
/ 17 октября 2012

Да, триггер выполняется 32 раза перед выдачей сообщения;чтобы прекратить делать это, используйте это

IF ((
SELECT TRIGGER_NESTLEVEL()) > 1 )
RETURN
0 голосов
/ 05 мая 2014

вы можете посмотреть на "ВМЕСТО ОБНОВЛЕНИЯ"

http://technet.microsoft.com/en-us/library/ms188601(v=sql.105).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...