Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 是否有包含RowVersion值的Microsoft.SqlServer.Management.Smo.SqlDataType的替代方案?_.net_Sql Server_Rowversion - Fatal编程技术网

.net 是否有包含RowVersion值的Microsoft.SqlServer.Management.Smo.SqlDataType的替代方案?

.net 是否有包含RowVersion值的Microsoft.SqlServer.Management.Smo.SqlDataType的替代方案?,.net,sql-server,rowversion,.net,Sql Server,Rowversion,枚举具有时间戳类型的值,但不具有行版本。我正在寻找程序集的更新版本或支持它的备用枚举类型 现有的枚举有一个时间戳的值,但根据的,时间戳是“不推荐的,将在将来的版本中删除”。我宁愿避免使用不推荐使用的东西:)我找不到任何表明SqlDataType.Timestamp不推荐使用的东西。您提供的链接表明,T-SQL中不推荐使用rowversion的“timestamp语法”,您应该改用rowversion,但应由库维护人员确保在其产品中实现正确的语法。如果在将来的版本中确实删除了时间戳语法,那么我确信

枚举具有
时间戳
类型的值,但不具有
行版本
。我正在寻找程序集的更新版本或支持它的备用枚举类型


现有的枚举有一个
时间戳
的值,但根据的,
时间戳
是“不推荐的,将在将来的版本中删除”。我宁愿避免使用不推荐使用的东西:)

我找不到任何表明
SqlDataType.Timestamp
不推荐使用的东西。您提供的链接表明,T-SQL中不推荐使用
rowversion
的“
timestamp
语法”,您应该改用
rowversion
,但应由库维护人员确保在其产品中实现正确的语法。如果在将来的版本中确实删除了时间戳语法,那么我确信库将被更新,
timestamp
枚举值对于使用它的代码仍然是向后兼容的。因为它们不提供
行版本
枚举值,所以我只使用
时间戳

快速回答:

不,您不需要使用其他类型。数据类型是要使用的正确类型。尽管名称很旧,但SMO为类型为的SQL Server列返回的值

不推荐使用的是在SQLServer DDL语句中使用类型名“timestamp”。如果代码正在生成包含类型名称
时间戳的DDL语句并将其发送到SQL Server,则应将代码改为使用
[rowversion][4]
。但是,如果您只是使用SMO或使用该类型的任何类型,您不会受到服务器端名称更改的影响

长答案:

我将在这里合并一些引用,以避免重新发明轮子。首先,一些历史来自:

此数据类型[ROWVERSION]为 在SQLServer2000中引入到 最终替换时间戳数据 类型。在ANSI-SQL定义中, 时间戳定义为日期和时间 是微软实施的时候了 作为一个二进制值,每个 行更改的时间。微软有 警告:时间戳的使用将 最终被改为坚持 ANSI标准,因此其用于 并发管理应该是 避免。目前,时间戳和 每个版本都类似 其他

请注意,Oracle和Postgres都以符合标准的方式使用时间戳,因此Microsoft放弃时间戳的非标准使用是明智之举,以避免使Oracle开发人员在SQL Server上工作时遇到困难

无论如何,从
时间戳
行版本
的更改只是名义上的。它不会影响使用该类型的列的行为。根据MSDN文件:

时间戳是 rowversion数据类型,并受 数据类型同义词的行为。在里面 DDL语句,请改用rowversion 尽可能使用时间戳。对于 有关详细信息,请参阅

如果您深入研究以下文档:

所有后续元数据函数 在原始对象上执行,并 任何派生对象都将报告 基本数据类型,而不是同义词。这 行为发生在元数据中 操作,如sp_帮助和其他 系统存储过程 信息架构视图,或 各种数据访问API元数据 报告数据类型的操作 表或结果集列的集合

换句话说,当SMO获得关于表的元数据时,它只知道rowversion。这意味着列类型为rowversion的表将作为

SMOAPI从未赶上SQL Server使用的新命名。但是因为类型的基本行为没有改变,只有名称,所以SMO客户端代码不需要改变

如果您的代码显示的是SQL Server数据类型,您可以做一个好公民,将代码更改为显示“rowversion”而不是“timestamp”。但除此之外,您的代码根本不需要更改。事实上,大多数SMO客户机()甚至都懒得修改UI以反映新的命名。因为这些UI在幕后连接到枚举,所以无论SQL Server在DDL中调用何种类型,SMO API客户端都将继续工作


SMO API的未来版本也可能会向枚举添加具有相同基础数值的同义值(例如
Microsoft.SqlServer.Management.SMO.SqlDataType.RowVersion
),但考虑到现有客户机没有被破坏,这对他们来说可能是一个低优先级。

RowVersion=TimeStamp-您不能改用TimeStamp数据类型吗??