创建触发器以更新orderdata

时间:2010-07-29 07:10:14

标签: sql sql-server-2005 null triggers

我在ms sql server 2005中创建了一个触发器。 触发器应该更新orderdata。 例如:

table
id order
1  1
2  2
3  3
4  4

更新,以便id 4具有订单2将创建。

table
id order
1  1
2  2
3  3
4  2

使用我的触发器,在此之后它会自动创建。

table
id order
1  1
2  3
3  4
4  2

我的表显然看起来不同,但这不应该太重要,我的触发器看起来像这样。

ALTER TRIGGER [dbo].[testtrigger] ON [dbo].[pages] AFTER UPDATE, INSERT AS

DECLARE @ordernr numeric(18, 0)
DECLARE @parentid numeric(18, 0)
DECLARE @thisid numeric(18, 0)

SET @ordernr = (SELECT TOP 1 pageOrder FROM Inserted)
SET @parentid = (SELECT TOP 1 pageParent FROM Inserted)
SET @thisid = (SELECT TOP 1 pageId FROM Inserted)

IF EXISTS (SELECT pageOrder FROM dbo.pages WHERE PageParent = @parentid AND pageOrder = @ordernr)
BEGIN
    UPDATE dbo.pages
    SET pageOrder=@ordernr + 1
    WHERE pageOrder=@ordernr
    AND PageId != @thisid
    AND PageParent=@parentid
END

在表格中,几个页面具有相同的父级,因此我需要命令将它们保持在正确的位置,但是如果页面位于顶部(也称为pageParent= NULL),则它不起作用,如果它不是t NULL它确实有效。

所以... PageParent = @parentid如果两者都是NULL,那么它们是否相等? 如果是的话,为什么这不起作用?

1 个答案:

答案 0 :(得分:0)

不,它没有。 NULL的东西不等于NULL的其他东西。它也不等于它。