1

我需要每天统计表中的记录数。

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

我正在使用 SQL Server 2008。

谢谢!

编辑: 如果我今天删除 2010 年 1 月 1 日的所有记录,统计数据仍需要显示 2010 年 1 月 1 日当天结束时有 500 条记录。因此,仅使用 GetDate() 并进行汇总是行不通的,因为我会在 2010 年 1 月 1 日使用该方法获得 0 条记录。

4

5 回答 5

2

像这样向表中添加一列:

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

然后,您可以按照 SQL 的意图进行查询。

于 2010-07-29T19:31:01.577 回答
2

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

于 2010-07-29T19:36:27.260 回答
1

汤姆对 OMG_Ponies 关于墓碑而不是删除的附录的回答是最好的答案。如果您担心某一天表中有多少条记录,那么很可能有一天有人会询问有关当天这些记录的信息。

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

于 2010-07-29T19:45:09.287 回答
1

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

Tom H. 提到的另一个选项是一个更好的选择,但是如果您出于某种原因无法更改表格,那么该工作是一个不错的选择。

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

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

于 2010-07-29T19:34:54.940 回答
0

SQL Job 很好——是的。

或者,您可以将日期列添加到默认为 GETDATE() 的表中。如果您不希望您的每日计数受到事后删除记录的人们的影响,这将不起作用。

于 2010-07-29T19:31:41.180 回答