在我当前的项目中,我必须将多个客户端数据库同步到一个服务器数据库。我试过微软的同步框架,在我的情况下没用。因此我必须手动同步。为此我需要在所有表中将主键约束从 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? 如何确保此流程不会破坏现有的外键约束?
答案 0 :(得分:0)
我不知道如何在新创建的列中填充值?
您提供的链接提供了解决方案:
在主表中为guid值创建一个新列。使用 uniqueidentifier 数据类型,使用newid()使其不为null 默认,以便填充所有现有行。
所以你的代码应该是这样的:
find()
如何在赋值后将此列设为PK?如何 确保此进程不会破坏现有的外键 约束
同样的答案告诉你:
使用与previuos语句中相同的alter table myTable add GuidCol uniqueidentifier not null default newid()
类型,但不是提供uniqueidentifier
,而是运行在现有整数defalut
上连接表的update语句,并在子列中设置相应的父母价值。
现在你已经建立了父子关系,但没有约束。删除id
列并在新int
列