.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数据类型吗??