需求..原表中有某个列存在中文字段和英文字段.现在把中文替换成英文
“找出中文” 和 “转换”的操作已经在程序中完成.现在需要一个更新的存储过程。
。因为转换完成后的英文字段可能和表中原有的字段重复..所以需要一个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
..........
“找出中文” 和 “转换”的操作已经在程序中完成.现在需要一个更新的存储过程。
。因为转换完成后的英文字段可能和表中原有的字段重复..所以需要一个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
..........
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
--新的如果存在?更新成老的?
@UserNameOld nvarchar(100),//原用户名
@UserNameNew nvarchar(100)//新用户名
AS
begin
update A6_Customer set UserName=@UserNameNew where username=@UserNameOld
end
为防止跟原来的原有的用户名可能产生冲突..所以 要判断一次..如果重复.inex+1.NewName加上index
@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
@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
参考:
http://topic.csdn.net/u/20110421/14/1b8b4678-eaff-489d-930f-187037cfc680.html
不好,你每次调用存储过程都需要update一次,这个效率不好
您的意思.是全部都设定完成之后再进行Update吗.?
TO:
如果第一次调用把‘aa’都改为‘aa1’,'aa2',那第二次调用再有个新的‘aa’,怎么办?‘aa3’
唔..的确是个问题...游标可以处理这些吗.?
需求..原表中有某个列存在中文字段和英文字段.
现在把中文替换成英文
“找出中文” 和 “转换”的操作已经在程序中完成.
现在需要一个更新的存储过程。
因为转换完成后的英文字段可能和表中原有的字段重复..所以需要一个Index操作..如果重复则index+1,然后添到新内容的后面..
where username=@UserNameNew
我发现一个问题- -你这样不是又把开始改的改回来叻- -?
大致过程如下: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
A有重复的话,就A1;
A1重复的话,就A2;
A2重复的话,就A3,直到不重复?
(
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