首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

查找SQL Server中值更改的时间

在SQL Server中查找值更改的时间可以通过使用触发器或者使用系统版本控制来实现。

  1. 使用触发器: 触发器是一种在数据库表中的数据发生更改时自动执行的特殊存储过程。可以创建一个触发器来跟踪值的更改时间。以下是一个示例触发器:
代码语言:txt
复制
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表中插入一条记录,包括旧值、新值和更改时间。

  1. 使用系统版本控制: SQL Server 2016及更高版本引入了系统版本控制(System Versioning)功能,它可以自动跟踪表中数据的历史变化。以下是一个示例表的创建语句:
代码语言:txt
复制
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的历史表,用于存储数据的历史版本。可以使用以下查询语句来获取特定值的更改时间:

代码语言:txt
复制
SELECT valid_from, valid_to
FROM your_table
FOR SYSTEM_TIME
    BETWEEN 'start_time' AND 'end_time'
WHERE your_column = 'value'

在上面的查询语句中,start_timeend_time是要查询的时间范围,value是要查询的特定值。

无论是使用触发器还是系统版本控制,都可以实现在SQL Server中查找值更改的时间。具体选择哪种方法取决于具体的需求和数据库架构。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SQL Server 的时间函数

参数 interval的设定值: 值 缩写(Sql Server) Access 和 ASP 说明 Year Yy yyyy 年 1753 ~ 9999 Quarter Qq q 季 1 ~ 4 Month...举例: 1.GetDate() 用于sql server :select GetDate() 2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为...取当天或当月的记录 表中的时间格式是这样的:2007-02-02 16:50:08.050, 如果直接和当天的时间比较,就总得不到准确数据,但是我们可以把这种格式的时间[格式化]成 2007-02-02...最后一个就是格式了,这个值是可选的:20或者120都可以,它遵循的是[ODBC 规范],输入/输出样式为:yyyy-mm-dd hh:mm:ss[.fff] 具体的可以参考Sql Server的联机帮助...====================================================== T-Sql查找表中当月的记录 思路:将要查找的时间字段用Month()函数取出其中的月份,然后再取出当前月的月份

2.8K60
  • SQL Server 2008新特性——更改跟踪

    在SQL Server 2008中提供了两种跟踪数据更改的方案: 变更数据捕获(Change Data Capture) 更改跟踪(Chang Tracking) 今天我主要说的是更改跟踪,变更数据捕获在以后进行讲解...启用更改跟踪 更改跟踪是SQL Server 2008的一个新特性,默认情况下是没启用的。更改跟踪可以应用跟踪到具体一个数据库中的具体表甚至是具体的列。...启用更改跟踪后对数据操作的性能影响不是很大。这些信息是记录到SQL Server系统表中的,系统自动负责清理和维护。 要使用更改跟踪需要启用数据库的更改跟踪功能和表的更改跟踪功能。...,而且这些操作的时间已经超过了数据库更改跟踪中设置的保持期时间,那么过期的版本就会被系统自动清理,清理后最小版本就不是0了,而是保留的可用的最早版本。...更改跟踪启用后对一般的DML操作(增删改)是不会有影响的,所有的DML SQL语句照常使用,而且启用更改跟踪后并不会对系统性能造成明细影响。

    80930

    sql server时间戳timestamp

    在SQL Server中联机丛书是这样说的: SQL Server timestamp 数据类型与时间和日期无关。...SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序。实现 timestamp 数据类型最初是为了支持 SQL Server 恢复算法。...Microsoft® SQL Server™ 将来的版本可能会修改 Transact-SQL timestamp 数据类型的行为,使它与在标准中定义的行为一致。...如果该列属于索引键,则对数据行的所有更新还将导致索引更新。 使用某一行中的 timestamp 列可以很容易地确定该行中的任何值自上次读取以后是否发生了更改。如果对行进行了更改,就会更新该时间戳值。...如果没有对行进行更改,则该时间戳值将与以前读取该行时的时间戳值一致。若要返回数据库的当前时间戳值,请使用 @@DBTS。

    22510

    使用SignalR和SQLTableDependency进行记录更改的SQL Server通知

    但是,此类不会发送回已更改记录的值。 因此,假设我们要在网页上显示股票值,则对于收到的每个通知,我们都必须执行一个新的完整查询以刷新缓存,然后刷新浏览器。...该组件的实现是: SqlTableDependency 对于SQL Server OracleTableDependency 对于Oracle 怎么运行的 实例化后,此组件将动态生成用于监视表内容的所有数据库对象...Watch Dog SqlTableDependency具有watchDogTimeOut,可在应用程序突然断开连接的情况下删除那些对象。此超时设置为3分钟,但是在部署阶段可以增加该超时时间。...放置所有这些对象后,SqlTableDependency获取表内容更改的通知,并在包含记录值的C#事件中转换此通知。...代码 假设一个包含股票值不断变化的SQL Server数据库表: CREATE TABLE [dbo].

    1.2K20

    SQL SERVER 时间换空间,空间换时间 以及什么是好SQL

    先说问题,最近的SQL SERVER 内存消耗的厉害,在这之前是建立了一堆的索引,来提高查询的效率,内存的使用也在悄然的上涨...., 在一个负载过重的系统上,大型的查询无法获得所需要的内存的最小量,带来的就是处理这个SQL 的等待,而如果此时你的数据库还支持并行,POSTGRESQL ORACLE SQL SERVER ,等都支持并行...我会从以下维度来考虑一个SQL 到底OK 不OK 1 执行时间,这当然的考虑, 否则你的客户就要投诉你了 2 每个SQL 占用的内存(我会对一些复杂的SQL 来看看到底会占用多少内存,怎么看后面说)...3 SQL 的复杂度,如果一个SQL 本身很复杂,那就要拆 关于第三个问题可能马上就有人问,我就喜欢写复杂的SQL 我又没有用MYSQL ,ORACLE SQL SERVER 不就是让人写复杂SQL...其实在考虑一个SQL 是不是更快的时候,时间的节省,可能带来的就是空间的损失(这里不光指的是内存),所以还是那句话,空间换时间,时间换空间,在每种数据库上都是可以找寻的一句“金句”。

    1.5K50

    使用SQL Server 扩展事件来创建死锁的时间跟踪

    我们通过SQL Server 2012图形界面来部署一个扩展事件跟踪会话。然后可以生成SQL脚本,在2008或2008 R2版本下运行类似的跟踪。...步骤4: 选择不使用模板(像SQL Server Profiler模板一样,预设了一些默认选项一起启动,但没有一个满足我们需求的模板),点击下一步。 ?...1 2 3 4 5 CREATE EVENT SESSION [Deadlock_Monitor] ON SERVER ADD EVENT sqlserver.xml_deadlock_report ADD...选择对应timestamp的死锁条目,在Details的xml_report值里显示的就是死锁的XML文件,可双击打开。点击 Deadlock即可看到死锁的图形化展示。 ? ? ?...选择对应timestamp的死锁条目。 ? ? 如果有用户反馈说他们在应用程序的错误日志里发现了输出了死锁信息,而且是在深夜。我们就可以知道怎么监控和获取死锁数据了。

    1.9K90

    SQL Server修改表结构,不允许保存更改解决方案

    解决方案 当修改表结构时,sql server会弹出对话框,显示以下内容: 不允许保存更改。您所做的更改要求删除并重新创建以下表。...您对无法重新创建的表进行了更改或者启用了“阻止保存要求重新创建表的更改”选项。 分析这句话, 1、我们修改了表结构,这个更改需要删除这个表并且重新创建,当然这个过程是由系统自动完成的。...3、无法保存原因二:启用了“阻止保存要求重新创建表的更改”选项。 可以通过设置解决的,我们先尝试更改设置。...原因二解决方案:菜单栏->工具->选项->设计器->表设计器和数据库设计器,右侧面板,取消勾选“阻止保存要求重新创建表的更改”。

    57410

    sql server 与mysql的区别_sql server的优缺点

    MySQL支持enum,和set类型,SQL Server不支持 MySQL不支持nchar,nvarchar,ntext类型 MySQL的递增语句是AUTO_INCREMENT,而MS SQL...,[type]表示他区别于关键字,但是MySQL却是 `,也就是按键1左边的那个符号 MS SQL支持getdate()方法获取当前时间日期,但是MySQL里面可以分日期类型和时间类型,获取当前日期是...current_date (),当前完整时间是 now()函数 MS SQL不支持replace into 语句,但是在最新的sql20008里面,也支持merge语法 MySQL支持insert...不能放在子查询内,limit不同与SQLServer,它可 以规定范围 limit a,b——范围a-b SQL SERVER : select top 8 * from table1 MYSQL: select...41. (19) MySQL视图的FROM子句不允许存在子查询,因此对于SQL Server中FROM 子句带有子查询的视图,需要手工进行迁移。

    2.3K20

    SQL 查找是否存在,别再 count 了,很耗费时间的!

    根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*) 呢?...无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往的count 目前多数人的写法 多次REVIEW代码时,发现如现现象: 业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录...普遍的SQL及代码写法如下 #### SQL写法: SELECT count(*) FROM table WHERE a = 1 AND b = 2 #### Java写法: int nums = xxDao.countXxxxByXxx...: #### SQL写法: SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1 #### Java写法: Integer exist = xxDao.existXxxxByXxx...= NULL ) { //当存在时,执行这里的代码 } else { //当不存在时,执行这里的代码 } SQL不再使用count,而是改用LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了

    39530

    SQL查找是否存在,别再count了,很耗费时间的

    编辑:业余草 来自:http://suo.im/5T1tGv 根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写 SQL 的时候,还要 SELECT count(*) 呢?...普遍的 SQL 及代码写法如下 ##### SQL写法: SELECT count(*) FROM table WHERE a = 1 AND b = 2 ##### Java写法: int nums...OK,没有什么问题 保持对 SQL 写法的怀疑态度 优化方案 推荐写法如下: ##### SQL写法: SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT...= NULL ) { //当存在时,执行这里的代码 } else { //当不存在时,执行这里的代码 } SQL 不再使用 count,而是改用 LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了...业务代码中直接判断是否非空即可 SQL 查询速度大大提升 总结 根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建

    33010

    SQL查找是否存在,别再count了,很耗费时间的

    根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*) 呢?...无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往的count 目前多数人的写法 多次REVIEW代码时,发现如现现象: 业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录...普遍的SQL及代码写法如下 ##### SQL写法: SELECT count(*) FROM table WHERE a = 1 AND b = 2 ##### Java写法: int nums =...OK,没有什么问题 优化方案 推荐写法如下: ##### SQL写法: SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1 ##### Java写法:...= NULL ) { //当存在时,执行这里的代码 } else { //当不存在时,执行这里的代码 } SQL不再使用count,而是改用LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了

    41810

    SQL 查找存在,别再用 count 了,很耗费时间的!

    根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*) 呢?...普遍的SQL及代码写法如下 SQL写法: SELECT count(*) FROM table WHERE a = 1 AND b = 2 Java写法: int nums = xxDao.countXxxxByXxx...SQL写法: SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1 Java写法: Integer exist = xxDao.existXxxxByXxx...= NULL ) { //当存在时,执行这里的代码 } else { //当不存在时,执行这里的代码 } SQL不再使用count,而是改用LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了...业务代码中直接判断是否非空即可 总结 根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建 Java 的知识面非常广,面试问的涉及也非常广泛,重点包括:Java 基础

    41800
    领券