Sql 我的扳机坏了

Sql 我的扳机坏了,sql,sql-server,sql-server-2008,triggers,sql-update,Sql,Sql Server,Sql Server 2008,Triggers,Sql Update,我一直在为我的SQL数据库开发触发器 各表: 表1:IDint、自动递增、value1varchar、value2varchar、countint TABLE1_History:IDSeparate from TABLE1.ID,int,auto increment,与TABLE1相同的列,但添加了TimeStampsmalldatetime 守则: 应该发生什么: 当我向TABLE1添加新行时,我希望更新TABLE1\u历史记录 表1\u历史记录仅在以下情况下添加新行:行已经存在,且与新行具有

我一直在为我的SQL数据库开发触发器

各表:

表1:IDint、自动递增、value1varchar、value2varchar、countint

TABLE1_History:IDSeparate from TABLE1.ID,int,auto increment,与TABLE1相同的列,但添加了TimeStampsmalldatetime

守则:

应该发生什么:

当我向TABLE1添加新行时,我希望更新TABLE1\u历史记录

表1\u历史记录仅在以下情况下添加新行:行已经存在,且与新行具有相同的值1和值2,并且自添加该行以来已超过24小时

否则,计数器将增加

发生了什么:

截至目前:表1\u历史记录每次都会更新。值是否匹配并不重要


在我决定将TABLE1_History.ID与TABLE1.ID分开之前,它似乎起到了作用。

您应该避免使用关键字,以便使用时间戳。如果你能把它改成LastModified什么的

不要使用@ROWCOUNT,你可以加入INSERTED,我不知道你为什么要使用LIKE。试试这个

IF NOT( EXISTS (   -- if it's not already in the table
    SELECT value1 FROM TABLE1_History
    JOIN INSERTED ON TABLE1_History.value1 = INSERTED.value1
                 AND TABLE1_History.value2 = INSERTED.value2
   ) )
   OR EXISTS (    -- or its history was last modified over 24 hours ago
    SELECT value1 FROM TABLE1_History
    JOIN INSERTED ON TABLE1_History.value1 = INSERTED.value1
                 AND TABLE1_History.value2 = INSERTED.value2
                 AND DATEDIFF(HOUR,TABLE1_History."TimeStamp", GETDATE()) > 24
   )       
BEGIN             -- insert it into the history table
    INSERT INTO TABLE1_History(value1, value2, count, "TimeStamp")
    SELECT value1, value2, count, GETDATE() FROM INSERTED
END
ELSE
BEGIN             -- otherwise update the current history record
    UPDATE th
    SET th."TimeStamp" = GETDATE()
        , th.count = th.count + INSERTED.count
    FROM TABLE1_History th
    JOIN INSERTED ON th.value1 = INSERTED.value1
                 AND th.value2 = INSERTED.value2
                 AND DATEDIFF(HOUR, th."TimeStamp", GETDATE()) < 24;
END

SQL Server?请添加标签。你是说stackoverflow中的标签?在这种情况下,修复了。可能比我的解决方案更好。当值相同时,触发器工作。但当它们彼此不同时,什么也不会发生。我现在尝试清空表格,但意识到历史上没有添加任何内容now@Yoan已修复以允许“新”记录
IF NOT( EXISTS (   -- if it's not already in the table
    SELECT value1 FROM TABLE1_History
    JOIN INSERTED ON TABLE1_History.value1 = INSERTED.value1
                 AND TABLE1_History.value2 = INSERTED.value2
   ) )
   OR EXISTS (    -- or its history was last modified over 24 hours ago
    SELECT value1 FROM TABLE1_History
    JOIN INSERTED ON TABLE1_History.value1 = INSERTED.value1
                 AND TABLE1_History.value2 = INSERTED.value2
                 AND DATEDIFF(HOUR,TABLE1_History."TimeStamp", GETDATE()) > 24
   )       
BEGIN             -- insert it into the history table
    INSERT INTO TABLE1_History(value1, value2, count, "TimeStamp")
    SELECT value1, value2, count, GETDATE() FROM INSERTED
END
ELSE
BEGIN             -- otherwise update the current history record
    UPDATE th
    SET th."TimeStamp" = GETDATE()
        , th.count = th.count + INSERTED.count
    FROM TABLE1_History th
    JOIN INSERTED ON th.value1 = INSERTED.value1
                 AND th.value2 = INSERTED.value2
                 AND DATEDIFF(HOUR, th."TimeStamp", GETDATE()) < 24;
END