我最近使用 SQL Server Migration Assistant 将数据库导入 SQL Server 2005。我注意到许多导入的表已被一个名为 SSMA_timestamp 的新列修改。
谁能告诉我这是做什么用的以及如何使用?
我最近使用 SQL Server Migration Assistant 将数据库导入 SQL Server 2005。我注意到许多导入的表已被一个名为 SSMA_timestamp 的新列修改。
谁能告诉我这是做什么用的以及如何使用?
添加的 SSMA_timestamp 列不仅在迁移期间使用。当 Access 更新链接到 SQL Server 的表中的记录时,它们实际上有助于避免错误。因此,如果您仍在使用链接到迁移的 SQL Server 数据库的 Access 前端,最好不要删除 SSMA_timestamp 列。
从 MSDN 文章Optimizing Microsoft Office Access Applications Linked to SQL Server:
支持并发检查
Office Access 链接表中可更新性问题的主要原因可能是 Office Access 无法验证服务器上的数据是否与正在更新的动态集上次检索的内容相匹配。如果 Office Access 无法执行此验证,则假定服务器行已被其他用户修改或删除,并中止更新。
有几种类型的数据 Office Access 无法可靠地检查匹配值。其中包括大型对象类型,例如 text、ntext、image,以及 SQL Server 2005 中引入的 varchar(max)、nvarchar(max) 和 varbinary(max) 类型。此外,浮点数值类型,例如 real和浮点数会受到舍入问题的影响,这会使比较变得不精确,导致在值没有真正改变时取消更新。Office Access 在更新包含没有默认值且包含空值的位列的表时也会遇到问题。
解决这些问题的一种快速简便的方法是在 SQL Server 上的表中添加一个时间戳列。时间戳列中的数据与日期或时间完全无关。相反,它是一个二进制值,保证在整个数据库中是唯一的,并且每次将新值分配给表中的任何列时都会自动增加。此类列的 ANSI 标准术语是 rowversion。SQL Server 支持该术语。
Office Access 会自动检测表何时包含此类列,并在影响该表的所有 UPDATE 和 DELETE 语句的 WHERE 子句中使用它。这比验证所有其他列是否仍具有上次刷新动态集时的相同值更有效。
Office Access 的 SQL Server 迁移助手会自动将名为 SSMA_TimeStamp 的列添加到包含可能影响可更新性的数据类型的任何表中。
我认为这是生成的,以便迁移助手可以在迁移过程中检测到数据的更改。
除非您继续使用 Access 作为您已迁移到 SQL Server 的特定数据库的前端(在这种情况下,请参阅 Simon 的回答),否则我认为迁移完成后它们不会用于任何事情,所以应该是一旦确定一切都已完成,就可以安全地删除这些新列。
<!-- Set project preference.
Preference path/name/value can be found in preferences.prefs file stored in SSMA project directory.
Preference path is the node name path starting from root to leaf node separating by "/". -->
<set-project-preference preference-path="prefs/ssma-for-access/a2ss/conversion"
preference-name="timestamp-columns-opt"
preference-value="never" />
在 SSMA GUI 中,您还可以单击工具 --> 默认项目设置 --> 转换 --> 表 --> 添加时间戳列 --> 设置为从不