Я написал некоторый код, чтобы гарантировать, что все позиции в заказе пронумерованы ( «номер позиции» или «номер позиции» был введен только недавно, и мы не хотели идти и менять весь связанный код - поскольку это «только для астетиков» и не оказывает никакого функционального воздействия. )
Итак, идея состоит в том, чтобы пойти и проверить записи, которые содержат 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