将主键从int移动到Guid

时间:2017-09-13 10:44:13

标签: sql sql-server

在我当前的项目中,我必须将多个客户端数据库同步到一个服务器数据库。我试过微软的同步框架,在我的情况下没用。因此我必须手动同步。为此我需要在所有表中将主键约束 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) 

在上面的代码中我试图在google搜索后添加一个列GuidCol作为唯一列。但 我不知道如何在新创建的列中填充值? 如何在分配值后将此列设为PK? 如何确保此流程不会破坏现有的外键约束?

1 个答案:

答案 0 :(得分:0)

  

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

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

  

在主表中为guid值创建一个新列。使用    uniqueidentifier 数据类型,使用newid()使其不为null   默认,以便填充所有现有行。

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

find()
  

如何在赋值后将此列设为PK?如何   确保此进程不会破坏现有的外键   约束

同样的答案告诉你:

  • 在子表中创建新的uniqueidentifier列。
  • 运行update语句以使用。来构建公会关系 exisitng int relationship以引用实体。
  • 删除原始的int列。

使用与previuos语句中相同的alter table myTable add GuidCol uniqueidentifier not null default newid() 类型,但不是提供uniqueidentifier,而是运行在现有整数defalut上连接表的update语句,并在子列中设置相应的父母价值。 现在你已经建立了父子关系,但没有约束。删除id列并在新int

上创建PK和FK