需求..原表中有某个列存在中文字段和英文字段.现在把中文替换成英文
“找出中文” 和 “转换”的操作已经在程序中完成.现在需要一个更新的存储过程。
。因为转换完成后的英文字段可能和表中原有的字段重复..所以需要一个Index操作..
问题.
 如何写这个循环.. (写了一半..卡住了.)谢谢
CREATE PROCEDURE [dbo].[A6_CustomerChangeUserName]
@UserNameOld nvarchar(100),//原用户名
@UserNameNew nvarchar(100)//新用户名
AS
declare @index int
SET @index=1;
WHILE EXISTS(SELECT UserName FROM A6_Customer WHERE UserName=@UserNameNew)
BEGIN 
..........

解决方案 »

  1.   


    CREATE PROCEDURE [dbo].[A6_CustomerChangeUserName]
    @UserNameOld nvarchar(100),--原用户名
    @UserNameNew nvarchar(100)--新用户名
    AS
    declare @index int
    SET @index=1;
    WHILE EXISTS(SELECT UserName FROM A6_Customer WHERE UserName=@UserNameNew)
        BEGIN 
        update A6_Customer set UserName=@UserNameOld
        where  UserName=@UserNameNew
        end
    --新的如果存在?更新成老的?
      

  2.   

    CREATE PROCEDURE [dbo].[A6_CustomerChangeUserName]
    @UserNameOld nvarchar(100),//原用户名
    @UserNameNew nvarchar(100)//新用户名
    AS
    begin
        update A6_Customer set UserName=@UserNameNew where username=@UserNameOld
    end
      

  3.   

    - -
    为防止跟原来的原有的用户名可能产生冲突..所以 要判断一次..如果重复.inex+1.NewName加上index
      

  4.   

    如果新的存在.index加上一..然后新的后面加上index.继续检查..知道不存在.再插入
      

  5.   

    CREATE PROCEDURE [dbo].[A6_CustomerChangeUserName]
    @UserNameOld nvarchar(100),//原用户名
    @UserNameNew nvarchar(100)//新用户名
    AS
    begin
    declare @index int
    SET @index=1;
    if EXISTS(SELECT UserName FROM A6_Customer WHERE UserName=@UserNameNew)
      update A6_Customer set UserName=@UserNameNew+RTRIM(@index),@index=@index+1
           where username=@UserNameNew
    end
      

  6.   

    CREATE PROCEDURE [dbo].[A6_CustomerChangeUserName]
    @UserNameOld nvarchar(100),//原用户名
    @UserNameNew nvarchar(100)//新用户名
    AS
    begin
    declare @index int
    SET @index=1;
    if EXISTS(SELECT UserName FROM A6_Customer WHERE UserName=@UserNameNew)
      update A6_Customer set UserName=@UserNameNew where username=@UserNameOld--第一步
      update A6_Customer set UserName=@UserNameNew+RTRIM(@index),@index=@index+1--第二部
           where username=@UserNameNew
    end
      

  7.   

    光用while不好处理,用游标吧
    参考:
    http://topic.csdn.net/u/20110421/14/1b8b4678-eaff-489d-930f-187037cfc680.html
      

  8.   

    不好,你每次调用存储过程都需要update一次,这个效率不好。需要寻求它法
      

  9.   

    如果第一次调用把‘aa’都改为‘aa1’,'aa2',那第二次调用再有个新的‘aa’,怎么办?‘aa3’?需要另寻方法。
      

  10.   

    TO:
    不好,你每次调用存储过程都需要update一次,这个效率不好
    您的意思.是全部都设定完成之后再进行Update吗.?
    TO:
    如果第一次调用把‘aa’都改为‘aa1’,'aa2',那第二次调用再有个新的‘aa’,怎么办?‘aa3’
    唔..的确是个问题...游标可以处理这些吗.?
      

  11.   

    do not understand what you mean
      

  12.   

    - -我也想改..不过貌似你不能编辑帖子
    需求..原表中有某个列存在中文字段和英文字段.
    现在把中文替换成英文
    “找出中文” 和 “转换”的操作已经在程序中完成.
    现在需要一个更新的存储过程。
    因为转换完成后的英文字段可能和表中原有的字段重复..所以需要一个Index操作..如果重复则index+1,然后添到新内容的后面..
      

  13.   

     update A6_Customer set UserName=@UserNameNew+RTRIM(@index),@index=@index+1--第二部
               where username=@UserNameNew
    我发现一个问题- -你这样不是又把开始改的改回来叻- -?
      

  14.   

    其实很简单啊,你只要在每次UPDATA前,先将要生成的新的USERNAME拼出来,然后去数据表里判断是否存在,存在的话,继续拼,直到不存在再UPDATE好了。
    大致过程如下:create table t1
    (
    id int identity(1,1),
    name varchar(10)
    )
    insert into t1
    select '你好' union all
    select 'aaa1' union all
    select 'bbb' union all
    select 'aaa2' union all
    select 'aaa3'
    select * from t1declare @oldname varchar(5)='你好',
    @newname varchar(5)='aaa1',
    @index int=1,
    @count int
    select @count=COUNT(*) from t1 where name=@newname --先计算重复名称的记录有多少条
    if @count=0 --没有的话直接更新
    begin
    update t1 set name=@newname where name=@oldname
    end
    else --有的话,再利用WHILE来判断
    begin
    while @index<=@count
    begin
    set @newname=@newname+CONVERT(varchar,@index)
    set @index=@index+1
    if not exists (select 1 from t1 where name=@newname)
    begin
    update t1 set name=@newname where name=@oldname
    end
    end
    end
      

  15.   

    楼主你说的如果重复,需要INDEX+1,意思是不是说:
    A有重复的话,就A1;
    A1重复的话,就A2;
    A2重复的话,就A3,直到不重复?
      

  16.   

    如果是的话,请参照下面这个例子:create table t1
    (
    id int identity(1,1),
    name varchar(10)
    )
    insert into t1
    select '你好' union all
    select 'aaa1' union all
    select 'aaa11' union all
    select 'aaa12' union all
    select 'aaa13'
    select * from t1declare @oldname varchar(5)='你好',
    @newname varchar(5)='aaa1',
    @midname varchar(5),
    @index int=1,
    @count int
    set @midname=@newname --用来始终保持@namename的值
    select @count=COUNT(*) from t1 where name like @newname+'%' --先计算重复名称的记录有多少条,这里使用LIKE运算符
    if @count=0 --没有的话直接更新
    begin
    update t1 set name=@newname where name=@oldname
    end
    else --有的话,再利用WHILE来判断
    begin
    while @index<=@count
    begin
    set @newname=@midname+CONVERT(varchar,@index)
    set @index=@index+1
    if not exists (select 1 from t1 where name=@newname)
    begin
    update t1 set name=@newname where name=@oldname
    end
    end
    end