【问题标题】:creating a trigger to update orderdata创建触发器以更新 orderdata
【发布时间】:2010-07-29 07:10:14
【问题描述】:

我在 ms sql server 2005 中创建了一个触发器。 触发器应该更新订单数据。 示例:

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)它不起作用并且如果它不是 NULL它确实有效。

那么...如果两者都是NULLPageParent = @parentid 是否等于 true? 如果是,为什么这不起作用?

【问题讨论】:

    标签: sql sql-server-2005 null triggers


    【解决方案1】:

    不,它没有。 NULL 值不等于 NULL 值。它也不等于它。

    【讨论】:

    • Thnx,我也找到了我的问题的解决方案,不得不在触发器内将 ANSI_NULLS 更改为 OFF
    猜你喜欢
    • 2019-05-03
    • 1970-01-01
    • 2012-07-31
    • 2016-05-26
    • 2017-03-27
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多