gpt4 book ai didi

sql-server - 每天只运行一次的触发器

转载 作者:行者123 更新时间:2023-12-01 12:49:01 25 4
gpt4 key购买 nike

此触发器将数据从 dbo.node 备份到 dbo.nodearchive。虽然备份很重要,但我每天只需要做一次。请注意,有一个名为 dbo.NodeArchive.versionDate (smalldDatetime) 的字段。

CREATE TRIGGER [dbo].[Node_update] 
ON [dbo].[Node]
for UPDATE

AS
BEGIN
INSERT INTO dbo.NodeArchive ([NodeID]
,[ParentNodeID]
,[Slug]
,[xmlTitle]
...
,[ModifyBy]
,[ModifyDate]
,[CreateBy]
,[CreateDate])

SELECT [deleted].[NodeID]
,[deleted].[ParentNodeID]
,[deleted].[Slug]
,[deleted].[xmlTitle]
...
,[deleted].[ModifyBy]
,[deleted].[ModifyDate]
,[deleted].[CreateBy]
,[deleted].[CreateDate]
FROM [deleted] LEFT JOIN dbo.Node
ON [deleted].NodeID = dbo.Node.NodeID
WHERE deleted.ModifyDate <> dbo.Node.ModifyDate
END
GO

我希望备份更改,但每天最多备份一个版本。如果没有变化,就没有备份。

最佳答案

这不再是触发器 - 这将是一个计划的工作。触发器根据其定义每当给定操作(INSERT、DELETE、UPDATE)发生时执行。

使用 SQL Server 代理工具安排该 T-SQL 代码每天运行一次。

阅读all about SQL Server Agent Jobs in the SQL Server Books Online on MSDN

更新: 所以如果我理解正确的话:你想要一个 UPDATE 触发器 - 但那个触发器只会记录 NodeID受影响,变成“这些节点需要在晚上备份”之类的表。然后,在晚上,您将有一个 SQL 代理作业运行并扫描该“工作表”,并针对存储在其中的所有 NodeID 值,然后执行该 T-SQL 语句以复制它们数据到 NodeArchive 表中。

使用这种方法,如果您的 NodeID = 42 节点更改了十次,您的工作表中仍然只有一个条目 NodeID = 42,并且然后每晚的备份作业只会将该节点复制到 NodeArchive 中一次。

通过这种方法,您可以分离实际复制(这可能需要时间)与更新过程。 UPDATE 触发器仅记录哪些 NodeID 行需要处理 - 实际处理随后会在非高峰时间发生,不会打扰系统用户。

关于sql-server - 每天只运行一次的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13679646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com