我经常使用SQL Server迁移助手将数据库导入SQL Server 2005.我注意到导入的一些表已被一个名为SSMA_timestamp的新列修改。
有谁能告诉我这是为了什么以及如何使用它?
答案 0 :(得分:21)
添加的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的列添加到包含可能影响可更新性的数据类型的任何表中。
答案 1 :(得分:10)
我认为这是生成的,因此迁移助手可以在迁移过程中检测数据的更改。
除非您继续使用Access作为此特定数据库的前端,否则您已迁移到SQL Server(在这种情况下请参阅Simon的答案),我认为迁移完成后它们不会被用于任何内容,因此一旦确定一切都完成,放弃这些新列应该是安全的。
答案 2 :(得分:0)
def func(a, b):
print(a, ": variable given everytime the model is used")
print(b, ": variable given when the model is defined")
enter code here
def model(b):
def model_deliver(a):
func(a, b)
return model_deliver
s = model(20)
s(12) #prints result as below
# 12 : variable given everytime the model is used
# 20 : variable given when the model is defined
答案 3 :(得分:0)
在SSMA GUI中,您还可以单击工具->默认项目设置->转换->表->添加时间戳列->设置为从不