如何在SQL Server中存储/检索时间戳?

Kas*_*sen 9 c# sql-server

我有一个表,每行需要一个时间戳来标记插入的时间.我没有很多数据库经验,但有些东西告诉我,这最好在数据库端自动处理,例如通过存储过程.

在MS SQL中有一个timestamp数据类型,但是阅读它,它被视为一系列数字而不是C#中的DateTime对象.所以如果我不得不进行转换,那么它不能只是一个NVARCHAR数据类型吗?

所以简单地说,当插入到表中时,什么是最简单的方法(自动?)将时间戳放在一行上?

编辑:表定义非常简单.它目前只有两列,但仍缺少时间戳列.

        SqlCommand command = con.CreateCommand();
        command.CommandText = "INSERT INTO Bio VALUES (" +
            "@ID, @Name)";

        command.Parameters.AddWithValue("ID",number);
        command.Parameters.AddWithValue("Name", name);

        try
        {
            SqlDataReader thisReader = command.ExecuteReader();
            thisReader.Close();
        }
        catch { // Do something };
Run Code Online (Sandbox Code Playgroud)

解决方案好的,它现在有效.我首先尝试通过Visual Studio 2008中的"服务器资源管理器"窗口添加新列.找到我的数据库,右键单击并选择"新建查询".然后键入类似的东西

ALTER TABLE dbo.MyTable ADD CreatedDate datetime NOT NULL DEFAULT (GetUtcDate())
Run Code Online (Sandbox Code Playgroud)

但我收到了消息

不支持ALTER TABLE SQL构造在图和标准窗格中无法以图形方式表示查询.

所以我用图形方式添加了它.首先"打开表定义"并在"数据类型"下的"列名称"和"日期时间"下添加CreatedDate.删除允许空值检查.然后在我添加的列属性中

getutcdate()
Run Code Online (Sandbox Code Playgroud)

在"默认值或绑定"行中的"常规"部分下.每当插入新行时,数据库会自动将当前日期和时间作为时间戳.

Dav*_*ras 8

在表中创建一个CreatedDate列创建如下:

ALTER TABLE dbo.MyTable ADD CreatedDate datetime NOT NULL DEFAULT (GetUtcDate())
Run Code Online (Sandbox Code Playgroud)

编辑:如果之后您希望在每次更新该记录时更新值,您可以将GetUtcDate()重新分配给该列或另一个(我称之为Createddate,因此不应在更新中使用,但您可以添加另一个一个或重命名为Modifieddate).我肯定会在存储过程中包含此类列的更新,而UPDATE这里不需要触发器.


gbn*_*gbn 6

SQL Server"timestamp"类型与标准"timestamp"不同:它更准确地说是"rowversion".不推荐使用数据类型"timestamp".有关所有这些,请参阅MSDN

您应该使用datetime这是一个真实的日期/时间值

最简单的方法是在表上使用GETDATE或GETUTCDATE对DEFAULT进行DEFAULT,以便SQL Server自动维护它

编辑:更新

您可以使用此语法进行更新

UPDATE T SET col = @x, UpdatedDateTime = DEFAULT WHERE ...
Run Code Online (Sandbox Code Playgroud)

这很有用,因为默认约束确定的值不是代码.因此,如果您更改默认值(例如,从GETDATE切换到GETUTCDATE),则更改约束,而不是代码