目的:
   username字段更新改为email字段条件:
  用户名是唯一的问题:
  执行 update table set usernam=email;用户名重复。username        email
---------------------------------
tom             [email protected]
[email protected]     [email protected] 
---------------------------------
期望结果如下
---------------------------------
username            email
---------------------------------
[email protected]        [email protected]
[email protected]       [email protected] 谢谢指教

解决方案 »

  1.   

    如只根据你上面的数据,直接
    你的SQL语句应该可以,
    贴记录及要求结果出来看看,记录多一点,以供测试
      

  2.   

    为什么
    [email protected]    [email protected] ->
    [email protected]      [email protected] ,
    简要说明一下
      

  3.   


    不可以啊
    当更新
    tom            [email protected]
    这条数据的时候
    就是把[email protected]作为用户名了
    那么数据中已经有
    [email protected]    [email protected]
    这条记录了
    就违反唯一约束啦!
    所以更新中断了,根本更新不了啊
      

  4.   

    最简单的方法,DROP主键,UPDATE,再增加主键
      

  5.   

    小雨  我想到一个麻烦一点的方法1、你可以先把email导入一张临时表中,这个表有两个字段 为:
    id  email
    为方便后面的替换操作,这里的id可以设置成自增长
    2、然后将你原来表中的username按照临时表的顺序,将内容替换为临时表的id
    3、此时由原来一张表间的数据替换改为两张表间的替换  同时可以以username=id作为条件了麻烦了点  不过应该行的通~~
      

  6.   

    UserName如果可以为NULL,那就这么做:update table set username = null
    update table set username = emailUserNaem如果不能为NULL,那就这么写:
    update table set username = 'NULL'
    update table set username = email思路就是先把username的数据清除掉,然后再填入email的数据进去
      

  7.   

    我的表里有100多W数据,删除主键可以嘛?
    主键是uid
    即使删除了
    username还有唯一约束,
    那样可以嘛?
      

  8.   


    如果你的UserName是主键,就按照这么操作
      

  9.   

    SELECT a.email as username,a.email from ttk a left join ttk b on a.username=b.email
    where b.email is null
    union
    SELECT a.email as username,a.email from ttk a left join ttk b on a.username=b.email
    where b.email is not null
      

  10.   

    no problem
    CREATE TABLE tb(uName VARCHAR(10) UNIQUE NONCLUSTERED,mail VARCHAR(10))
    GO
    --INSERT tb SELECT 1,1 UNION ALL SELECT 1,2
    /*
    消息 2627,级别 14,状态 1,第 1 行
    违反了 UNIQUE KEY 约束 'UQ__tb__212CC0CF'。不能在对象 'dbo.tb' 中插入重复键。
    语句已终止。
    */INSERT tb SELECT 1,2
    UNION ALL SELECT 2,3
    GOSELECT * FROM tb
    GO
    UPDATE tb SET uName = mail
    GO
    SELECT * FROM tb
    /*
    2 2
    3 3
    */
    GO
    DROP TABLE tb
    GO
      

  11.   

    哦,删除唯一约束,UPDATE后再加,
    OR 
    用上述SQL语句生成一个新表
      

  12.   

    好办法哦 king,但是我的email没有唯一约束哦我看下有没重复哈
      

  13.   

    比如临时表叫emailtemp
    第一步:
    你将原表中的email导入其中,多加id一列,变为:
    id   email
    1    [email protected] 
    2    [email protected] 
    .....
    *************************************************************************
    第二步,将原表中的username全部按emailtemp中的email替换为id的值,替换结果如下:
    username   email 
    1         [email protected] 
    2         [email protected] 
    ************************************************************************
    第三步:以emailtemp中的id=原表中的username作为条件
    将原表中的username替换为emailtemp中的email
    此时就得到你想要的结果:
    username            email 
    --------------------------------- 
    [email protected]        [email protected] 
    [email protected]      [email protected] 
      

  14.   

    因为你有唯一约束,故直接UPDATE是不可能的,只有间接方法
      

  15.   

    如只根据你上面的数据,直接 
    你的SQL语句应该可以, 
      

  16.   

    update username set username=username+'&@#$'
    update username set username=email
      

  17.   

    你不就是表中username有与email相同的值么,依你的更新,username现有值已经无效,那,把它先替换成一个不可能存在于email列值的值(后面加上一些奇怪的字符串,这些字符串不可能出现在email列中),再更新不就成了.
    不过要注意,要进行你所要求的更新,email列必须没有重复值,你检查过没有?
      

  18.   

    呵呵,居然写错了:
    update tb set username=username+'&@#$'
    update tb set username=email