SQL Server时间戳列可以显式插入或更新吗?

时间:2014-06-18 09:12:25

标签: sql-server timestamp

有没有办法为SQL Server中的表中的时间戳列提供显式值?我知道它不是datetime列,但我想知道是否有任何方法可以显式插入或更新它。

3 个答案:

答案 0 :(得分:0)

您无法显式插入/更新时间戳列。当您对表执行插入/更新时,它们会自动生成。

答案 1 :(得分:0)

因为时间戳似乎是插入或更新列时数据库创建的时间戳的表示,实际上您必须更改数据库创建的原始时间戳才能显式定义它们。

从您的第二条评论中,我感谢您可能有数据已经​​加上时间戳,您只需要在表格上显示的数据与插入“set identity_insert on”的数据相同。

答案是将现有表格选择到另一个表格中,然后添加传入数据。如果你运行下面的代码,我想你会明白我的意思。

create table abc
(
col1 int, timestamp
)
go
insert into abc(col1) values (1)
go
select col1,convert(varbinary,timestamp) timestamp# into def from abc
go
select * from abc
select * from def

答案 2 :(得分:0)

据我所知,timestamp表示行版本号(这就是为什么在更新行中的值时它们会因为您正在创建该行的另一个版本而更改的原因)。事务日志中可能有一个日期,表明该行的这个版本何时产生。我不认为可以直接将时间戳转换为日期时间。

嗯..我唯一的另一个想法是添加另一个列,然后选择时间戳值!最奇怪的是,这样做需要最后一个角色!看看你的想法。

drop table abc
go
create table abc
(
col1 int, timestamp
)
go
insert into abc(col1) values (1)
go
alter table abc add timestamp# varbinary(18)
go
update abc set timestamp# = convert(varbinary,timestamp)

通常来说,在创建表时,我会包含一个默认为datetime的列,这样每个行创建时都有一个日期时间。

像这样:

drop table def
go
create table def
(
col1 int,
idt datetime default getdate()
)

如果在col1中插入一个值,并且在insert语句的列列表中不包含idt,则idt列将默认为您插入值的日期时间。

像这样:

insert into def (col1) values (1)