我需要每个月在23:59:59.59小时截断我的表格,以便记录新记录
自动从00:00:00开始插入。如何在不安排的情况下完成
这份工作......?示例:
该表必须被截断,否则记录必须在7月31日完全自动删除
23:59:59.59
答案 0 :(得分:0)
答案 1 :(得分:0)
不太好,但另外一种方法是使用 WAITFOR DAELAY 功能。
例如:
BEGIN
WAITFOR DELAY '24:00';
EXECUTE sp_helpdb;
END;
GO
现在 WAITFOR DAELAY 的问题在于,你不能给超过24小时的时间。因此,在这种情况下,您可以执行以下解决方法:
在你的SP中添加几行:
IF CAST(GETDATE() AS DATE) = '07/31/2014'--OR dynamically calculate last day of the month
BEGIN
DELETE FROM TableName;-- your delete statement
END
由于您每天晚上都会安排WAITFOR,所以我们可以假设'07 / 31/2014'也只会在晚上调用,因此仅匹配日期部分就足够了。如果指定时间,则可能会在确切的指定时间调用SP,因为在调用脚本时涉及许多因素(例如CPU周期可用,线程等)。
答案 2 :(得分:0)
您的时间的粒度是多少?你的例子显示了一秒钟的hundreth。你对失去记录的容忍度是多少,比如在午夜之后创造一万分之一秒,或者保留一个在午夜之前创造万分之一秒的记录?
任何基于作业调度的解决方案都必须处理作业调度程序和数据之间的粒度差异,加上作业本身的执行时间,以及操作系统和/或SQL Server投入混合的任何先发制人的多任务处理加上任何恶作剧,底层VM(如果有的话)可能会破坏。
我建议您使用partitioned view根据日期和时间在基表上传播数据。捕获数据的时间。由于你谈到每月截断一次,两个表以“月数2模数”为特征就足够了。可以为您想要的任何截断率设计类似的方案。然后,您可以在上个月的基准表上执行任何整理,对帐,存档或其他任何内容,同时积极插入本月的内容。一旦你开心就截断了上个月的基准表,你已经为下个月的周期做好了准备。