SQL Server - 每天自动计算总数

时间:2010-07-29 19:28:10

标签: sql-server sql-server-2008 sql-agent-job

我需要保存表格中记录计数的每日统计数据。

有没有办法每天自动计算记录并将结果写入另一个表?也许使用SQL Agent Job或类似的东西?

我正在使用SQL Server 2008。

谢谢!

修改 如果我今天从2010年1月1日删除所有记录,统计数据仍然需要显示在2010年1月1日当天结束时有500条记录。所以单独使用GetDate()并总结是行不通的,因为我在2010年1月1日使用该方法得到0条记录。

5 个答案:

答案 0 :(得分:2)

在表中添加一列,如下所示:

ALTER TABLE My_Table
ADD insert_date DATETIME NOT NULL DEFAULT GETDATE()

然后,您可以将其作为SQL预期进行查询。

答案 1 :(得分:2)

插入触发器:更新今天的计数表记录(如果尚未创建则插入)
删除触发器:减少今天的计数表记录(如果尚未创建则插入)

答案 2 :(得分:1)

在我看来,你用最好的选择回答了你自己的问题。创建一个只调用存储过程来获取计数并加盖它们的作业。

Tom H.提到的另一个选择是更好的选择,但是如果你因为某种原因不能改变这个表,那么这个工作是个不错的选择。

另一种选择可能是在该表上放置一个插入触发器以在某处增加计数,但这可能会影响性能,具体取决于您实现它的方式。

通过SQL Management Studio界面设置作业非常简单,其中包含运行频率和要调用的存储过程的计划。您甚至可以直接在步骤的命令窗口中编写命令,而不是调用sp。

答案 3 :(得分:1)

汤姆回答OMG_Ponies关于墓碑而不是删除的补遗是最好的答案。如果您担心某一天表中 的记录数是多少,那么有一天很可能会有人在那天要求提供关于那些记录的信息

如果这是不行,那么就像其他人所说的那样,创建第二个表,其中包含当天最后一条记录的PK字段,然后计算当天,然后创建一个最后运行的作业每天使用OrginalTable.PK>计算所有记录MAX(NewCountTable.Last_PK_Field)并将该行(Last_PK_Field,Count)添加到NewCountTable。

答案 4 :(得分:0)

SQL Job很好 - 是的。

或者您可以在默认为GETDATE()的表中添加日期列。如果你不希望你的日常计数受到事后删除记录的人的影响,那么这将无效。