sql-server – 有关在MS Access中使用SQL Server GUID的建议

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

以下是问题:

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

解决方法

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

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

关于从整数到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)

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...