要求切换user_key字段的想法

时间:2017-07-18 15:46:24

标签: sql sql-server

在数据库中进行了一些更改后,一些用户得到了重复(但具有不同的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”栏目。

我正在询问如何让用户登录他们的旧帐户。

1 个答案:

答案 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