首页 新闻 搜索 专区 学院

在SQL SERVER 数据库中,有好多100多个表,想将多个表中字段名为“StateId”的重命名为“StatusId”怎么办

0
悬赏园豆:5 [已解决问题] 解决于 2017-09-28 15:49

在SQL SERVER 数据库中,有好多100多个表,想将多个表中字段名为“StateId”的重命名为“StatusId”怎么办

WesternWind的主页 WesternWind | 初学一级 | 园豆:7
提问于:2013-12-05 10:09
< >
分享
最佳答案
0

对同一数据库下的多个数据表的同一字段进行处理举例

例如

多个数据表中都含有csign字段,需要替换空格为空,‘’

1 查询含有该字段的数据表名称

  select sc.name,so.name from syscolumns sc left join

  sysobjects so on sc.id=so.id

  where sc.name='csign' and so.type='u'

 或

   select so.name from sysobjects so where so.id in (select id from syscolumns
  where name='csign' )

  and   so.type='u'

 2 实现替换‘ ’替换为‘’

声明列名、表名和定义游标

declare @colname as nvarchar(100),@tablename as nvarchar(100),@sql as  nvarchar(1000)

declare @cur as cursor

set @colname='csign'

为游标赋值

set @cur=CURSOR for (select so.name from syscolumns sc left join

sysobjects so on sc.id=so.id

where sc.name='csign' and so.type='u')

--默认为全局游标,

声明局部游标也可以:set @cur=cursor global/local for这里没有必要

打开游标

open @cur

 获取值到临时变量中

fetch @cur into @tablename

循环替换

while  @@FETCH_STATUS=0 --获取成功

begin

    set @sql='update ' + @tablename +' set ' +@colname +' =replace('+
@colname +','' '','''')'

    print @sql

    exec(@sql)

    fetch next from @cur into @tablename

end

关闭游标

close @cur

释放游标

deallocate @cur

收获园豆:5
银杏叶儿 | 初学一级 |园豆:197 | 2013-12-05 10:45

  把@sql语句修改一个,原来语句是修改列的内容,不是修改列名

set @sql='update ' + @tablename +' set ' +@colname +' =replace('+
@colname +','' '','''')'

declare @oldcolname as nvarchar(20)

declare @newcolname as nvarchar(30)

set @oldcolname='StateId'

set @newcolname='StatusId'

 exec sp_rename @tablename+'.'+@oldcolname,@newcolname,'column';

银杏叶儿 | 园豆:197 (初学一级) | 2013-12-05 10:54
其他回答(2)
0

说白了就是拼接动态SQL 执行从syscolumns和sysobjects查找到的有特定列的表,再修改此表中的列。

Albert Fei | 园豆:2102 (老鸟四级) | 2013-12-05 17:16
0

直接打开修改表就可以修改了啊

夜空下的男子 | 园豆:31 (初学一级) | 2015-08-22 13:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册