SQL Server 2008 行插入和更新时间戳

2024-04-14

我需要向 SQL Server 2008 R2 中的数据库表添加两列:

  • 创建TS-插入行的日期和时间
  • 更新TS-更新行的日期和时间

我有几个问题:

  1. 我应该为其中的每一个使用什么列数据类型?
  2. createTS只需在插入行时设置一次。当我尝试datetime键入此列并添加默认值或绑定 of getdate(),适当设置列值。这是实现本专栏目的的最佳方式吗?我考虑过timestamp数据类型 https://learn.microsoft.com/en-us/previous-versions/sql/sql-server-2005/ms182776(v=sql.90),但在我看来,这几乎是一个用词不当!
  3. updateTS需要设置为更新行时的日期和时间。在 SQL Server 中,没有更新 CURRENT_TIMESTAMP 时(就像在 MySQL 中一样),所以看来我必须求助于使用触发器。这是正确的吗?我该怎么做?

因此,对于任何想回答这个问题的人来说,都有一个起点,这里是创建表脚本:

CREATE TABLE [dbo].[names]
(
    [name] [nvarchar](64) NOT NULL,
    [createTS] [datetime] NOT NULL CONSTRAINT [DF_names_createTS]  DEFAULT (getdate()),
    [updateTS] [datetime] NOT NULL,
    CONSTRAINT [PK_names] PRIMARY KEY CLUSTERED 
    (
        [name] ASC
    )
    WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

try

CREATE TABLE [dbo].[Names]
(
    [Name] [nvarchar](64) NOT NULL,
    [CreateTS] [smalldatetime] NOT NULL CONSTRAINT CreateTS_DF DEFAULT CURRENT_TIMESTAMP,
    [UpdateTS] [smalldatetime] NOT NULL

)

聚苯乙烯 我认为小日期时间就足够了。您可能会做出不同的决定。

难道在“冲击的那一刻”就不能这样做吗?

在 Sql Server 中,这是常见的:

Update dbo.MyTable 
Set 

ColA = @SomeValue , 
UpdateDS = CURRENT_TIMESTAMP
Where...........

Sql Server 有一个“时间戳”数据类型。

但它可能不是你想的那样。

这是一个参考:

http://msdn.microsoft.com/en-us/library/ms182776(v=sql.90).aspx http://msdn.microsoft.com/en-us/library/ms182776(v=sql.90).aspx

这里有一点行版本 https://learn.microsoft.com/en-us/sql/t-sql/data-types/rowversion-transact-sql?view=sql-server-2017 (时间戳的同义词 https://learn.microsoft.com/en-us/previous-versions/sql/sql-server-2005/ms177566%28v%3dsql.90%29) 例子:

CREATE TABLE [dbo].[Names]
(
    [Name] [nvarchar](64) NOT NULL,
    RowVers rowversion ,
    [CreateTS] [datetime] NOT NULL CONSTRAINT CreateTS_DF DEFAULT CURRENT_TIMESTAMP,
    [UpdateTS] [datetime] NOT NULL

)


INSERT INTO dbo.Names (Name,UpdateTS)
select 'John' , CURRENT_TIMESTAMP
UNION ALL select 'Mary' , CURRENT_TIMESTAMP
UNION ALL select 'Paul' , CURRENT_TIMESTAMP

select *  ,  ConvertedRowVers = CONVERT(bigint,RowVers) from [dbo].[Names]

Update dbo.Names Set Name = Name

select *  ,  ConvertedRowVers = CONVERT(bigint,RowVers) from [dbo].[Names]

也许是一个完整的工作示例:

DROP TABLE [dbo].[Names]
GO


CREATE TABLE [dbo].[Names]
(
    [Name] [nvarchar](64) NOT NULL,
    RowVers rowversion ,
    [CreateTS] [datetime] NOT NULL CONSTRAINT CreateTS_DF DEFAULT CURRENT_TIMESTAMP,
    [UpdateTS] [datetime] NOT NULL

)

GO

CREATE TRIGGER dbo.trgKeepUpdateDateInSync_ByeByeBye ON dbo.Names
AFTER INSERT, UPDATE
AS

BEGIN

Update dbo.Names Set UpdateTS = CURRENT_TIMESTAMP from dbo.Names myAlias , inserted triggerInsertedTable where 
triggerInsertedTable.Name = myAlias.Name

END


GO






INSERT INTO dbo.Names (Name,UpdateTS)
select 'John' , CURRENT_TIMESTAMP
UNION ALL select 'Mary' , CURRENT_TIMESTAMP
UNION ALL select 'Paul' , CURRENT_TIMESTAMP

select *  ,  ConvertedRowVers = CONVERT(bigint,RowVers) from [dbo].[Names]

Update dbo.Names Set Name = Name , UpdateTS = '03/03/2003' /* notice that even though I set it to 2003, the trigger takes over */

select *  ,  ConvertedRowVers = CONVERT(bigint,RowVers) from [dbo].[Names]

匹配“Name”值可能并不明智。

使用代理键尝试这个更主流的示例

DROP TABLE [dbo].[Names]
GO


CREATE TABLE [dbo].[Names]
(
    SurrogateKey int not null Primary Key Identity (1001,1),
    [Name] [nvarchar](64) NOT NULL,
    RowVers rowversion ,
    [CreateTS] [datetime] NOT NULL CONSTRAINT CreateTS_DF DEFAULT CURRENT_TIMESTAMP,
    [UpdateTS] [datetime] NOT NULL

)

GO

CREATE TRIGGER dbo.trgKeepUpdateDateInSync_ByeByeBye ON dbo.Names
AFTER UPDATE
AS

BEGIN

   UPDATE dbo.Names
    SET UpdateTS = CURRENT_TIMESTAMP
    From  dbo.Names myAlias
    WHERE exists ( select null from inserted triggerInsertedTable where myAlias.SurrogateKey = triggerInsertedTable.SurrogateKey)

END


GO






INSERT INTO dbo.Names (Name,UpdateTS)
select 'John' , CURRENT_TIMESTAMP
UNION ALL select 'Mary' , CURRENT_TIMESTAMP
UNION ALL select 'Paul' , CURRENT_TIMESTAMP

select *  ,  ConvertedRowVers = CONVERT(bigint,RowVers) from [dbo].[Names]

Update dbo.Names Set Name = Name , UpdateTS = '03/03/2003' /* notice that even though I set it to 2003, the trigger takes over */

select *  ,  ConvertedRowVers = CONVERT(bigint,RowVers) from [dbo].[Names]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 2008 行插入和更新时间戳 的相关文章

  • 如何在 SQL 中选择“上一条”和“下一条”记录?

    I am building a blog post detail page on my site that will display display a previous and next link similar to how a typ
  • SQL 中的代码重用和模块化

    代码重用和模块化对于 SQL 存储过程编程来说是一个好主意吗 如果是这样 将这些功能添加到 SQL 存储过程代码库的最佳方法是什么 我通常为常见且重复的任务创建标量值函数 我发现它不仅可以简化与现有程序类似的新程序的开发 而且还有助于错误跟
  • 在 WHERE 子句中使用可选参数

    我有一个SP ALTER PROCEDURE dbo sp Compare lst varchar 100 frst varchar 100 NULL passportNo varchar 50 NULL AS SELECT FROM db
  • 为什么 SSRS 报表从 SQL Server Reporting Services 运行时生成的数据与使用“预览”选项卡运行时生成的数据不同?

    我有一个运行我想要的数据的报表 从 预览 选项卡 即 或者在 VS 2010 中使用 F5 运行时 但是当我将报表 rdl 文件 上传到 SQL Server Reporting Services 并运行更新后的报表时从那里报告 它仍然显示
  • SQL查询获取最后两条记录的DateDiff

    我有一个名为 Event 的表 其中 eventNum 作为主键 日期作为 SQL Server 2008 R2 中的 datetime2 7 我试图获取表中最后两行的日期并以分钟为单位获取差异 这就是我目前所拥有的 Select DATE
  • SQL Server中主键和唯一索引的区别[重复]

    这个问题在这里已经有答案了 我的公司目前正在重写我们最近获得的一个应用程序 我们选择使用 ASP net mvc4 来构建这个系统 并使用实体框架作为我们的 ORM 我们收购的公司的前任所有者非常坚定地要求我们使用他们的旧数据库 并且不对其
  • 从VBA中的数组批量插入到sql中

    我正在尝试在 Excel 中构建一个按钮 将所选区域上传到 SQL Server 中的表中 第一行将自动视为列标题 这件事该怎么继续下去呢 我想要的是简单和超快的上传 这是我的想法 我将选择选定的区域 然后将其保存为 txt 文件 然后对其
  • INFORMATION_SCHEMA 与 sysobjects

    在 SQL Server 中 INFORMATION SCHEMA 和 sysobjects 之间有什么区别 其中一个是否比另一个提供更多信息 或者它们通常用于不同的用途 sysobjects 与 sys objects 相同吗 如果不是
  • 插入后触发更新表列?

    在同一个表中添加任何记录后 我需要更新表中的列 这是我的sql代码 CREATE TRIGGER dbo EmployeeInsert ON dbo APP Employees AFTER INSERT AS BEGIN SET NOCOU
  • 数据结构的优化存储以实现快速查找和持久化

    Scenario 我有以下方法 public void AddItemSecurity int itemId int userIds public int GetValidItemIds int userId 最初我正在考虑表单上的存储 i
  • Sql 查询:Sum,表中所有可能的行组合

    SQL Server 2008 R2 表结构示例 create table TempTable ID int identity value int insert into TempTable values 6 insert into Tem
  • 如何在SQL Server数据库表列中存储图像[重复]

    这个问题在这里已经有答案了 我有一张名为FEMALE在我的数据库中 它有ID as Primary Key 它有一个Image column 我的问题是如何使用 SQL 查询存储图像 尝试一下 insert into tableName I
  • t sql中的相对路径?

    如何获取t sql中的相对路径 举个例子 sql文件位于文件夹中D temp 我想获取文件夹中文件hello txt的路径D temp App Data 如何使用相对路径引用 假设我正在 SQL Server Management Stud
  • ASP.NET 网站上的 XSS 攻击 [已关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我遇到了很大的麻烦 请帮忙 我的网站
  • 从数据库配置中的连接字符串中删除 SSIS 密码

    我有一个 SSIS 包 它使用 SQL 服务器中的 SSIS 配置表来检索 OLE DB 连接管理器的连接字符串属性 问题是我还需要相同的连接字符串来调用使用实体框架的程序集 我尝试访问连接管理器连接字符串属性 但 SSIS 总是删除密码
  • 如何在 SQL Server 中添加具有自动增量值的字符串?

    如何在SQL Server中添加具有自动增量值的字符串 create table date sno int emp identity 1 1 我需要以下作为输出 emp 1 emp 2 用普通定义你的表INT IDENTITY column
  • SQL Server 查询结果集的大小

    SQL Server 中是否有确定结果集中 Mgmt Studio 查询中返回的数据大小 以 MEGS 为单位 您可以打开客户端统计信息 查询菜单 包括客户端统计信息 它给出执行查询时从服务器返回的字节数
  • 如何找出我的 MS SQL Server 排序规则是什么?

    是否有我可以执行的 SQL 来找出答案 服务器默认排序规则 select serverproperty collation 哪个是相同的 select databasepropertyex master collation Check 服务
  • 如何在动态查询中将行值连接到列名

    我正在开发一个允许配置问题和答案的应用程序 目前最多可以有 20 个答案 但也可能更少 我的结构如下 问题 ID FormId QuestionText AnswerField 1 1 Name Answer01 2 1 Address A
  • 案例陈述以确定我是否应该结合

    我目前想做某种条件联合 给出以下示例 SELECT age name FROM users UNION SELECT 25 AS age Betty AS name 假设我只想在 用户 计数 gt 2 时合并第二个语句 否则不合并两者 总之

随机推荐

  • WPF 断边

    我在使用 WPF 时遇到了一个相当奇怪的问题 当我将按钮放置在窗体上时 它们在设计时看起来很好 在 Windows XP 上看起来也很好 但当应用程序在 Windows 7 上运行时 边缘会损坏 Here is a screen shot
  • 访问 WinForms 中的 ToolStripMenuItem 子项

    H all 我在 Winform 中创建了一个菜单条 但不是动态的 而且这一切都是不可见的 当用户拥有权限时才可见 我的用户名之一拥有完全的权利 为此我写了下面的代码 private void menuActive MenuStrip me
  • 尝试加载动画时 Resources$NotFoundException

    我们在 Google Play 市场上的应用程序在某些设备上抛出了一个奇怪的异常 我看到以下堆栈跟踪 android content res Resources NotFoundException File res anim ani in
  • 使用 perl 包时将参数传递给它

    如何在使用包时传递一些参数 例如 use Test More tests gt 21 我无法找到有关此功能的任何有价值的文档 通过这样的论点有什么优点和缺点吗 use My Module LIST https metacpan org po
  • React Native改变监听端口

    我正在使用 React Native Android 并且在 Android 设备上部署应用程序时遇到问题 当我跑步时 react native启动 它不会在端口上启动开发服务器8081 我尝试了以下提到的一些选项 https reactn
  • 我设置了 hellomap 示例并收到以下错误

    我正在 Android Studio 中工作 并且在运行时不断收到此错误 E CL magma ERROR CL magma Unable to open shader file shaders gles2 0 Primitive shad
  • NotifyPropertyChanged 线程安全吗?

    我正在看NotifyPropertyChanged from INotifyPropertyChanged并注意到在 Microsoft 的示例中 如下所示 http msdn microsoft com en us library sys
  • Android:socket.io io.socket.engineio.client.EngineIOException:XHR 轮询错误

    有时我会收到此错误 io socket engineio client EngineIOException xhr 轮询错误 我的连接到套接字的代码 try HostnameVerifier myHostnameVerifier new H
  • 如何使 SendKeys 在 IBM Host Access Library 中同步动作

    我用用于 COM 自动化的 IBM 主机访问类库 https www 01 ibm com support knowledgecenter SSEQ5Y 6 0 0 com ibm pcomm doc books html host acc
  • google api 控制台删除了我注册的应用程序

    几个月前 我在 Google 开发者控制台中注册了两个 Android 应用程序 以使用 Google 地图 Android API 版本 2 今天 当我登录注册另一个应用程序时 我注意到 Google API 控制台没有显示我以前注册的应
  • “download_slot”在 scrapy 中如何工作

    我在 scrapy 中创建了一个脚本来解析author name来自其着陆页的不同帖子 然后将其传递到parse page方法使用meta关键字以打印post content随着author name同时 我用过下载槽在元关键字中 据称该关
  • hibernate_unique_key表是如何在新数据库中创建的?

    我正在尝试使用 NHibernate 创建我的第一个测试应用程序 如下所示NHibernate 2 0 初学者指南 https rads stackoverflow com amzn click com 1847198902 该示例在映射中
  • EF Code-First 中查找表的最佳实践

    我正在使用 EF 做我的第一个项目 并且计划采用代码优先模型 我正在尝试找到一些有关处理相当经典的 查找表 场景的指导 我正在处理一个非常规范的情况 我将保留地址数据 所以 我有一个简单的地址 DTO public class Addres
  • 在 BST 中查找中序后继而不使用任何额外空间

    我正在寻找一种方法来找出 BST 中节点的中序后继者 而不使用额外的空间 获取给定节点的中序后继节点N我们使用以下规则 If N有一个合适的孩子R那么inorderSuccessor N 是最左边的 的后继者R Else inorderSu
  • Solidity v0.6.0。后备功能。需要它们做什么?

    阅读 Solidity v0 6 0 的文档后docs https docs soliditylang org en latest 060 breaking changes html semantic and syntactic chang
  • 删除指向不存在目录的符号链接的安全方法(对于 python 二进制文件)

    我不小心输入了 sudo ln sf usr local bin python2 5 usr bin python 代替 sudo ln sf usr local bin python2 5 usr bin python 现在 每当我运行
  • 获取批处理文件中两个目录的路径

    我想获取从当前位置向上 2 个目录的文件夹的路径 我正在做以下事情 echo CD set NEW PATH bin echo PATH 当我运行上面的代码时 我打印了当前目录路径 但 NEW PATH 不是 它只是说 ECHO OFF 从
  • 在 ThreadPoolExecutor 中实现优先级队列

    已经为此苦苦挣扎了 2 天多了 实施了我在这里看到的答案Java中指定任务顺序执行 https stackoverflow com questions 12722396 specify task order execution in jav
  • 在 C# 中从不同类引发一个类的事件

    我有一个类 EventContainer cs 其中包含一个事件 例如 public event EventHandler AfterSearch 我还有另一个类 EventRaiser cs 我如何从此类中引发 而不是处理 上述事件 引发
  • SQL Server 2008 行插入和更新时间戳

    我需要向 SQL Server 2008 R2 中的数据库表添加两列 创建TS 插入行的日期和时间 更新TS 更新行的日期和时间 我有几个问题 我应该为其中的每一个使用什么列数据类型 createTS只需在插入行时设置一次 当我尝试date