Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何在指定时间删除记录_Sql Server 2008 - Fatal编程技术网

Sql server 2008 如何在指定时间删除记录

Sql server 2008 如何在指定时间删除记录,sql-server-2008,Sql Server 2008,我需要在每个月的23:59:59.59点截短我的表,以便获得新记录 从00:00:00.00开始自动插入。没有日程安排我怎么做 工作 例如: 表必须在7月31日被截断或记录必须被自动删除 23:59:59.59您可以通过CRON或SSMS新作业来执行此操作 请按照此链接进行SQL Server创建网元作业 不太好,但实现这一点的另一种方法是使用WaitforDaelay功能 例如: 现在,WaitforDaelay的问题是,您不能给出超过24小时的时间。因此,在这种情况下,您可以按如下方式进行解

我需要在每个月的23:59:59.59点截短我的表,以便获得新记录

从00:00:00.00开始自动插入。没有日程安排我怎么做

工作

例如:

表必须在7月31日被截断或记录必须被自动删除


23:59:59.59

您可以通过
CRON
或SSMS新作业来执行此操作

请按照此链接进行SQL Server创建网元作业


不太好,但实现这一点的另一种方法是使用WaitforDaelay功能

例如:

现在,WaitforDaelay的问题是,您不能给出超过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安排在晚上,因此我们可以假设在2014年7月31日,它也将仅在晚上调用,因此仅匹配日期部分就足够了。如果指定时间,则有可能在指定的确切时间调用SP,因为在调用脚本时涉及许多因素(例如CPU周期可用、线程等)


供您参考:

您的时间粒度是多少?你的例子显示了百分之一百秒。你对丢失记录的容忍度是多少,比如说在午夜后0.1秒的记录,或者保留在午夜前0.1秒的记录

任何基于作业调度的解决方案都必须处理作业调度程序和数据之间的粒度差异,再加上作业本身的执行时间,再加上操作系统和/或SQL Server在混合中抛出的任何先发制人的多任务处理,再加上底层VM(如果有的话)可能破坏的任何诡计


我建议您根据捕获数据的日期和时间,在基础表上分布数据。既然您提到每月截断一次,两个以“月数模2”区分的表就足够了。类似的方案可以为您喜欢的任何截断率设计。然后,您可以在上个月的基表上执行任何整理、对账、归档或其他操作,同时主动插入到本月的基表中。一旦你高兴地截断上个月的基表,你就为下一个月末周期做好了准备。

CRON
是答案:)这对我来说是新鲜事。当然,我会尝试上面的方法。感谢您去年在虚拟机上测试SQL Server时,我们观察到
等待延迟'00:00:10'
需要30秒才能完成。请小心使用它将活动计划到毫秒精度。@user3737182请务必让我知道此解决方案是否适用于您的情况。SQL Server作业只能计划到最接近的秒。那你什么时候安排?23:59:59还是00:00:00?如果是前者,则运行需要700毫秒。您如何处理以23:59:59.900到达的记录?安排在午夜的钟声,您可以删除记录在,例如,00:00:00.010的行。根据业务的不同,这可能是好的,也可能是坏的。
IF CAST(GETDATE() AS DATE) = '07/31/2014'--OR dynamically calculate last day of the month
BEGIN
     DELETE FROM TableName;-- your delete statement
END