在SQL Server中查找值更改的时间可以通过使用触发器或者使用系统版本控制来实现。
CREATE TRIGGER track_value_changes
ON your_table
AFTER UPDATE
AS
BEGIN
IF UPDATE(your_column)
BEGIN
INSERT INTO value_changes (column_name, old_value, new_value, change_time)
SELECT 'your_column', d.your_column, i.your_column, GETDATE()
FROM deleted d
INNER JOIN inserted i ON d.primary_key = i.primary_key
END
END
在上面的示例中,your_table
是要跟踪更改的表名,your_column
是要跟踪更改的列名,value_changes
是用于存储更改历史记录的表名。当your_column
的值发生更改时,触发器将在value_changes
表中插入一条记录,包括旧值、新值和更改时间。
CREATE TABLE your_table
(
your_column INT,
valid_from DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN,
valid_to DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN,
PERIOD FOR SYSTEM_TIME (valid_from, valid_to)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.your_table_history))
在上面的示例中,your_table
是要跟踪更改的表名,your_column
是要跟踪更改的列名。通过将SYSTEM_VERSIONING
设置为ON
,SQL Server将自动创建一个名为your_table_history
的历史表,用于存储数据的历史版本。可以使用以下查询语句来获取特定值的更改时间:
SELECT valid_from, valid_to
FROM your_table
FOR SYSTEM_TIME
BETWEEN 'start_time' AND 'end_time'
WHERE your_column = 'value'
在上面的查询语句中,start_time
和end_time
是要查询的时间范围,value
是要查询的特定值。
无论是使用触发器还是系统版本控制,都可以实现在SQL Server中查找值更改的时间。具体选择哪种方法取决于具体的需求和数据库架构。
领取专属 10元无门槛券
手把手带您无忧上云