2017-09-13 58 views
0

在我当前的项目中,我必须将多个客户端数据库同步到一个服务器数据库。我曾尝试过使用微软的同步框架,但对我而言并没有用。因此我必须手动进行同步。为此,我需要在所有表格中更改主键约束intguid将主键从int移动到Guid

问题是这个主键在其他表中也被称为外键。 我下面简称,

Moving from ints to GUIDs as primary keys

我不擅长SQL。我理解逻辑,但实际执行对我来说非常困难。

ALTER TABLE MyTable 
ADD GuidCol NVARCHAR(50) NOT NULL, 
CONSTRAINT AK_GuidCol UNIQUE(GuidCol) 

在上面的代码我试图添加一列GuidCol作为独特的列后谷歌搜索了很多。但是 我不知道如何在新创建的列中填充值? 如何在分配值后将此列作为PK? 如何确保此过程不会破坏现有的外键约束?

+0

什么是手动同步与外键的类型有关?您可能试图解决错误的问题。 –

+0

在手动同步中没有使用外键。但在这里我试图添加新的唯一GUID列。我想这个列是PK,所以我需要更新所有的外键表。例如。如果PK是1,Guid是G,那么我需要改变FK为1到G的其他表中的条目。对不起,写错了。我希望你能得到我想说的话。 – sachin

回答

0

我不知道如何在新创建的列中填充值?

您所提供的链接给出了解决方案:

创建在主表中的GUID值的新列。使用 uniqueidentifier数据类型,使其不为空,并且newid() 默认因此将填充所有现有行。

所以,你的代码应该是这样的:

alter table myTable add GuidCol uniqueidentifier not null default newid() 

我如何分配值(S)后,使该列PK?如何 确保此过程不会破坏现有外键 的约束?

相同的答案告诉你:

  • 在子表创建新的唯一标识符列。
  • 运行更新语句以使用存在的int关系来引用实体来构建公会关系。
  • 删除原始的int列。

使用相同uniqueidentifier类型的previuos声明,但不是提供defalut,运行更新语句加入现有的整数id表,并在孩子的列相应的父值设置。 现在你已经建立了孩子 - 父母关系,但没有对他们的限制。删除int列,并在新的​​列上创建PK和FK