Код настройки данных работает нормально при непосредственном выполнении, но никогда не останавливается при использовании в триггере - PullRequest
1 голос
/ 27 февраля 2010

Я написал некоторый код, чтобы гарантировать, что все позиции в заказе пронумерованы ( «номер позиции» или «номер позиции» был введен только недавно, и мы не хотели идти и менять весь связанный код - поскольку это «только для астетиков» и не оказывает никакого функционального воздействия. )

Итак, идея состоит в том, чтобы пойти и проверить записи, которые содержат itemno NULL или 0, а затем вычислить одну и присвоить ее. При выполнении этого кода в окне запроса он работает нормально. Когда он помещается в триггер AFTER INSERT, он зацикливается навсегда.

Так что здесь не так?

/****** Objekt:  Trigger [SetzePosNr]    Skriptdatum: 02/28/2010 20:06:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER [SetzePosNr]
ON [dbo].[bestellpos]
   AFTER INSERT 
  AS
BEGIN
   DECLARE @idb int
   DECLARE @idp int
   DECLARE @pnr int

   SELECT @idp=id,@idb=id_bestellungen FROM bestellpos WHERE posnr IS NULL OR posnr=0

   WHILE @idp IS NOT NULL
   BEGIN   
      SELECT @pnr = 1+max(posnr) FROM bestellpos WHERE id_bestellungen = @idb
print( 'idp=' + str(@idp) + ', idb=' + str(@idb) + ', posnr=' + str(@pnr))
      UPDATE bestellpos SET posnr=@pnr WHERE id=@idp
      SELECT @idp=id,@idb=id_bestellungen FROM bestellpos WHERE posnr IS NULL OR posnr=0
   END
 END

1 Ответ

0 голосов
/ 06 марта 2010

Aaaargh - только что обнаружена проблема: 3-я строка (с конца, оператор SELECT) не присваивает переменные, когда результат WHERE равен NULL. Так что "set @ idp = null" до того, как это утверждение решит проблему! Не уверен, почему я предположил проблему между прямым выполнением и срабатыванием этих операторов, похоже, я выбрал неправильные контрольные примеры: (

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