我有一个表存在于两个数据库中。
在一个数据库中有一个表,其中有一列称为ROW_VERSION
这是类型TIMESTAMP NOT NULL
.
在第二个数据库中,同一个表具有相同类型的列TIMESTAMP
但它是类型TIMESTAMP NULL
.
我想将第一个数据库中的列更改为可为空。这将使我能够更轻松地在两个数据库之间进行同步。
但是当我运行这个时:
ALTER TABLE [MyTable]
ALTER COLUMN ROW_VERSION TIMESTAMP NULL
我收到错误:
无法将列“ROW_VERSION”更改为数据类型时间戳。
它已经是一个时间戳了。我只需要让它可以为空。有办法做到这一点吗?
我认为你不能。并且一张表只能有一个时间戳列。
您也无法更新时间戳列,因此旧的“复制/删除/更新”技巧将不起作用。
你可能会被现有的东西困住。
create table #tmp (id int, timestamp null)
insert into #tmp (id) values (1)
select * from #tmp
create table #tmp2 (id int)
insert into #tmp2 (id) values (1)
alter table #tmp2 add timestamp null
select * from #tmp2
我正在测试 NULL TIMESTAMP 列,它实际上不会变为 NULL ——我找不到任何说明它的文档,但我认为 NULL TIMESTAMP 是不可能的(即使声明为 null,它在数据中也永远不会为 null) 。
timestamp 是 rowversion 数据类型的同义词,受主题影响
数据类型同义词的行为。在 DDL 语句中,使用
尽可能使用 rowversion 而不是时间戳。了解更多
信息,请参阅数据类型同义词 (Transact-SQL)...
http://msdn.microsoft.com/en-us/library/ms182776(v=sql.110).aspx http://msdn.microsoft.com/en-us/library/ms182776(v=sql.110).aspx
Also...
ALTER COLUMN 指定要更改的命名列或
改变了。修改的列不能是以下任何一项: A
具有时间戳数据类型的列...
http://msdn.microsoft.com/en-us/library/ms190273(v=sql.110).aspx http://msdn.microsoft.com/en-us/library/ms190273(v=sql.110).aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)