难题:如何更新所有表所有字段中值为"我的客户1"的记录

itsakidding 2005-07-12 03:42:27
比如说一个数据库中有十个表,我想把这十个表的所有记录中的"我的客户1"改为"我的客户2",该怎么改,头疼中
...全文
155 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiushaoye 2005-07-12
  • 打赏
  • 举报
回复
declare @loop int,@i int
declare @name varchar(80)
select @loop = count(*) from sysobjects where type = 'U'

set @i = 1
while @i <= @loop
begin
if @i = 1
select top 1 @name = name
from sysobjects
where type = 'U'
order by name
else
select top 1 @name = name
from sysobjects
where name > @name and type = 'U'
order by name
set @i = @i + 1

declare @colname varchar(40),
@loop2 int,
@i2 int,
@coltype varchar(10)
select @loop2 = count(*) from syscolumns where id = object_id(@name)
set @i2 = 1
while @i2 <= @loop2
begin
if @i2 = 1
select top 1 @colname = a.name,@coltype = b.name
from syscolumns a,systypes b
where a.id = object_id(@name) and a.xtype = b.xtype
order by a.name
else
select top 1 @colname = a.name,@coltype = b.name
from syscolumns a,systypes b
where a.id = object_id(@name) and a.xtype = b.xtype and a.name > @colname
order by a.name
declare @sql nvarchar(1000)
if @coltype in ('char','nchar','varchar','nvarchar','text')
begin
set @sql = 'update '+ @name +' set ' + @colname +'= ''gggggg'' where ' +
@colname + '=''bbb'''
select @sql
exec(@sql)
end
set @i2 = @i2 + 1
end
end
AndXie99 2005-07-12
  • 打赏
  • 举报
回复
把最后这print 改EXEC sp_executesql @sql
测试用的忘改了
AndXie99 2005-07-12
  • 打赏
  • 举报
回复
DECLARE @tablename varchar(50),
@fieldname varchar(50),
@child_nodeid varchar(50),
@child_mytest varchar(50),
@tempsql varchar(1000), --临时sql语句(中间结果)
@sql nvarchar(4000) --最后要执行SQL语句

set @tempsql = ''
set @sql=''

DECLARE table_cursor CURSOR FOR

--取得当前数据库中所有用户表表名和字段名
SELECT
d.name tablename,
a.name fieldname
FROM syscolumns a left join systypes b
on a.xtype=b.xusertype
inner join sysobjects d
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'

OPEN table_cursor

FETCH NEXT FROM table_cursor
INTO @tablename,@fieldname

WHILE @@FETCH_STATUS = 0
BEGIN
set @tempsql = 'update ' + @tablename + ' set ' + @fieldname + '=' + '''' + '我的客户2' + '''' + ' where ' + @fieldname + '=' + '''' + '我的客户1' + ''''
-- 获得下一条记录
FETCH NEXT FROM table_cursor
INTO @tablename,@fieldname
set @sql = @sql + @tempsql + ';'
END

CLOSE table_cursor
DEALLOCATE table_cursor

print @sql
zlp321002 2005-07-12
  • 打赏
  • 举报
回复
--该方法遍历你所有表中数据为:"我的客户1"替换为:"我的客户2"
--不需要指定字段名称!
zlp321002 2005-07-12
  • 打赏
  • 举报
回复
--Try用这个方法:
declare @oldstr varchar(100)
set @oldstr='原字符串' --原字符
declare @newstr varchar(100)
set @newstr='新字符串' --新字符

declare @s varchar(8000)
declare tb cursor local for
select s='if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@oldstr+'%'')
update ['+b.name+'] set ['+a.name+']='''+@newstr+''' where ['+a.name+']='''+@oldstr+''' '
from syscolumns a join sysobjects b on a.id=b.id
where b.xtype='U' and a.status>=0
and a.xusertype in(175,239,231,167)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb

--我的Bolg提到这个问题:参考
--http://blog.csdn.net/zlp321002/archive/2005/06/16/395621.aspx
MorningTea 2005-07-12
  • 打赏
  • 举报
回复
1.--B表中则是有几条记录的"GSMC"字段值为"我的客户2"
这种情况好办!
update B set GSMC='我的客户2' where GSMC='我的客户1'
2.A表中可能会有某几条记录的"KHMC"字段值为"我的客户2"
这种我想到的办法是这样,有点麻烦!但是只要执行一次!
思路:
update A set a.COL1=REPLACE(A.COL1,'我的客户2','我的客户1'),
a.COL2=REPLACE(A.COL2,'我的客户2','我的客户1'),
...
以后也可以用,不用修改你的sql语言,因为只要是字符串的Field你都写进去,不会有问题!
有则更新,没有也不会改变原来的值
FYI
itsakidding 2005-07-12
  • 打赏
  • 举报
回复
晕,我只是举例说是十个表,其实起码有五十个表,挨个UPDATE?...
而且以后可能还要做这件事
wangdehao 2005-07-12
  • 打赏
  • 举报
回复
挨个update,不是什么难题,就是麻烦点
update table1 set 字段='我的客户2' where 字段='我的客户1'
.....
itsakidding 2005-07-12
  • 打赏
  • 举报
回复
不行,但是我可以基本上找出有那几种字段名会有值"我的客户2"
Aden 2005-07-12
  • 打赏
  • 举报
回复
你将字段名改为和你一样的不行吗?
itsakidding 2005-07-12
  • 打赏
  • 举报
回复
现在最大的问题是不同的表中会有不同的字段名值为"我的客户2"
比如说A表中可能会有某几条记录的"KHMC"字段值为"我的客户2"
而B表中则是有几条记录的"GSMC"字段值为"我的客户2"
所以这个遍历的方法应该是比较复杂的,高手来看一下,帮帮忙
hglhyy 2005-07-12
  • 打赏
  • 举报
回复
用楼上的慢慢来吧!
Aden 2005-07-12
  • 打赏
  • 举报
回复
对每个表做下操作:

update table1 set col1='我的客户2' where col1='我的客户1'
update table2 set col1='我的客户2' where col1='我的客户1'
update table3 set col1='我的客户2' where col1='我的客户1'

...

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧