在数据库中进行了一些更改后,一些用户得到了重复(但具有不同的user_key
值)。当用户尝试登录时,他们会使用新的user_key
值登录帐户,因此看不到该帐户的任何历史记录。
在表格中,所有内容都是这样的:
user_key username lower_username
-------------------------------- -------- --------------
8ad7d2d65d424a40015d424b57500107 mtamu mtamu <- duplicated user
8ada96025245dad801535faba00d016e mtamu NULL <- old user
我尝试复制旧用户user_key
但收到错误:
UPDATE user_mapping
SET user_key = '8ada96025245dad801535faba00d016e' WHERE user_key = '8ad7d2d65d424a40015d424b57500107'
违反PRIMARY KEY约束'PK__user_map__E1CC8CC0049C3729'。 无法在对象'dbo.user_mapping'中插入重复键。该 重复键值为(8ada96025245dad801535faba00d016e)。
我尝试了另一个没有运气的想法:
UPDATE user_mapping
SET user_key = '1' WHERE user_key = '8ada96025245dad801535faba00d016e'
UPDATE user_mapping
SET user_key = '8ada96025245dad801535faba00d016e' WHERE user_key = '8ad7d2d65d424a40015d424b57500107'
UPDATE语句与REFERENCE约束冲突 “FK_CONTENT_LABEL_OWNER”。冲突发生在数据库中 “confluence5_8_18”,表“dbo.CONTENT_LABEL”,“OWNER”栏目。
我正在询问如何让用户登录他们的旧帐户。
答案 0 :(得分:0)
如果没有删除级联,只需DELETE
要替换的值
然后UPDATE
将要更改的值作为新值。
如果与引用的FOREIGN KEY
存在冲突,则
在执行DELETE
之前删除约束。
事后确定,FOREIGN KEY
没有引用密钥@wrongValue
,
如果是这样,那么你应该UPDATE
将外来列添加到新值。
DECLARE @normalValue as varchar(max);
DECLARE @wrongValue as varchar(max);
SET @normalValue = '8ada96025245dad801535faba00d016e';
SET @wrongValue = '8ad7d2d65d424a40015d424b57500107';
IF (SELECT COUNT(user_key) FROM user_mapping WHERE user_key = @wrongValue) > 0
BEGIN
ALTER TABLE user_mapping NOCHECK CONSTRAINT ALL;
DELETE user_mapping
WHERE user_key = @normalValue;
UPDATE user_mapping
SET user_key = @normalValue
WHERE user_key = @wrongValue;
ALTER TABLE user_mapping CHECK CONSTRAINT ALL;
UPDATE dbo.CONTENT_LABEL
SET Owner = @normalValue
WHERE Owner = @wrongValue;
END