我正在使用 MS SQL Server 2008,并且我有一个 sql 表,其中包含一些数据,这些数据每天早上 6 点由 sql 作业插入。我遇到的问题是一些数据已单独插入到作业中,我需要知道何时添加了这些数据。
有没有我可以运行的查询来显示这个?
我正在使用 MS SQL Server 2008,并且我有一个 sql 表,其中包含一些数据,这些数据每天早上 6 点由 sql 作业插入。我遇到的问题是一些数据已单独插入到作业中,我需要知道何时添加了这些数据。
有没有我可以运行的查询来显示这个?
我认为简短的回答是否定的,没有神奇的即席 SQL 查询可以让您事后返回并找出插入行的时间。
如果您想知道插入行的时间,最简单的方法是简单地添加具有默认值的日期或时间戳字段(如 getDate()),该字段会在插入行时自动填写日期/时间。
当然,有可用的 SQL 日志可让您跟踪何时插入、更新、删除等,但这些需要设置和维护。
第三种选择是让插入数据的程序执行一些记录。
将日期字段添加到表中。你可以给它一个默认值GETDATE()
然后ORDER BY
是那个领域。
SELECT Column1, Column2, NewDateColumn
FROM YourTable
ORDER BY NewDateColumn
我要做的是:
/* add new column to keep inserted row date */
ALTER TABLE [schemaName].[tableName] ADD [RecTime] DATETIME;
/* update the existing rows with the current date since there is no way to guess their insertion date */
UPDATE [schemaName].[tableName] SET [RecTime] = GETDATE();
/* and set a constraint to the RecTime column to set current date on every new row added */
ALTER TABLE [schemaName].[tableName] ADD CONSTRAINT [DF_tableName_RecTime] DEFAULT (GETDATE()) FOR [RecTime]
然后你可以得到这些行:
SELECT *
FROM [schemaName].[tableName]
WHERE NOT(DATEPART(hh, RecTime) = 6 AND DATEPART(mi, RecTime) <= 20)
如果您知道 sql 作业运行多长时间,您可以“玩”“20”
您可能需要查看 SQL CREATE TRIGGER以添加逻辑以了解何时添加数据并将该信息记录在另一个表中以进行进一步操作。如果没有更多细节,我不确定我们能说得更多。
当您指的是已经插入的数据时,答案是否定的,除非您已经有一个默认值为GETDATE()
. 事件发生后您可以管理的最佳方法是查看行序列并确定它在两个已知时间之间。