有关从MS Access使用SQL Server GUID的建议

时间:2008-12-26 01:54:09

标签: sql-server ms-access database-design

我正在将现有的MS Access后端升级到SQL Server 2008,因为我们想使用SQL Server Merge replication,所以我必须将所有当前主键(当前标准的自动增量整数)更改为GUID。

以下是问题:

  • 有关将主键从整数更改为GUID的任何建议吗?
  • 有关从Access客户端中的代码使用和操作GUID的任何建议吗?
  • 我应该使用哪种SQL Server GUID类型?

2 个答案:

答案 0 :(得分:3)

Chris说的是(1)您不需要GUIDS进行合并复制,(2)只有一种GUID类型,但您必须知道:

  1. 可以按照不同的规则生成GUIDS。您可以查看此here
  2. 设置复制时,SQL将系统地添加GUID (作为新的序列生成)到 每个表,如果它还没有 存在,并称之为rowguid。当然,如果每个表中已经有这样的GUID / newSequentialId,SQL将使用它。 BUt我不建议你将复制GUID与PK GUID'混合':你可以将GUID类型的所有主键声明为'newSequentialIds',但是(a)你将失去在客户端生成GUID值的可能性 - 见下文 - 和(b)你的PK将是“可预测的”,这个想法让我感到不舒服......
  3. 保持自动增量整数并通过复制管理其范围意味着大量开销(您必须为每个表/每个发布分配范围)以及从不同来源复制时潜在的冲突源。
  4. 此外,一些特定于范围分配的this one等SQL错误仍然没有得到妥善解决:应用累积包5并没有解决我们的问题,我们必须找到另一种方法来重启我们的复制过程。
  5. 无论如何,我深信从整数切换到GUID作为主键是强制性的。造成这种情况的原因有很多,其中一个原因与这些范围管理有关,因为它们是头痛和隔夜麻烦会议的潜在来源。
  6. 关于从整数到GUIDS的更改,我建议您编写一个分步模块:

    • 在修改之前备份所有现有表
    • 向每个表添加GUID字段
    • 在请求中添加相应的FK字段
    • 通过使用现有关系(基于整数字段构建)构建的视图更新FK字段
    • 打破关系
    • 将PK从整数字段更改为GUID字段
    • 重建关系

    花点时间编写此代码。在正常工作之前,您将多次使用它。您应该从DAO对象,tabledef,索引等中获利。请注意,必须始终能够返回起点,所以不要忘记初始备份过程。

    如何从VBA操纵GUID?有一些事情需要了解:

    • GUID属于Variant类型
    • 我可以轻松地将GUID生成为应用客户端的主键,因为我提出了here一次。
    • 当您尝试获取GUID值时 从一个形式的控件(通常作为组合框中的链接字段),你会得到'?????'但没有价值。您必须引用记录集中的字段值才能获得正确的数据。您可以在应用中打开此类表单,转到“即时”窗口,然后尝试以下操作:

    ? myForm.myControl
    ?????
    
    ? myForm.recordset.fields("myFieldName")
    {000581EB-9CBF-418C-A2D9-5A7141A686CC}
    
    • 在使用记录集(例如recordset.findfirst)浏览记录集时,可能必须将guid转换为字符串:

    myFirstRecordset.FindFirst "stringFromGUID(myGuidId) = " & StringFromGUID(mySecondRecordset.Fields("myGuidId").Value)
    

答案 1 :(得分:1)

这可能稍微偏离主题。但是,您不必使用GUID进行合并复制。您仍然可以使用自动增量整数并将不同的范围分配给不同的数据库实例。这样就不会生成具有相同ID的行。

此外,SQL 2008中只有一个GUID类型字段 - uniqueidentifier