今天遇到的一个需求,主管要求需要把所有的列名第一个字母改为大写,想着吧。手动改,丫的,改到天昏地暗都不知道什么时候能改完。就写了堆sql语句。
顺道记下笔记。。
下面这个是只执行一次修改的。。
--只修改一次 --首先声明一个游标 declare test_cur cursor for select name from syscolumns where id=object_id(N'Remarks') --获取该表中的所有列名 open test_cur --打开游标 declare @cname varchar(100) declare @cname2 varchar(100) declare @cname_new varchar(100) fetch next from test_cur into @cname set @cname2='Remarks.'+@cname --设置新旧列名 set @cname_new=UPPER(left(@cname,1))+SUBSTRING(@cname,2,len(@cname)-1) exec sp_rename @cname2,@cname_new,'column' -- 执行修改
接下来这个可以一次性修改整个表。。
--一次性将表中的列名第一个字母转换为大写 --首先声明一个游标 declare test_cur cursor for select name from syscolumns where id=object_id(N'MarkPlans') --获取该表中的所有列名 open test_cur --打开游标 declare @cname varchar(100) declare @cname2 varchar(100) declare @cname_new varchar(100) while @@FETCH_STATUS=0 begin fetch next from test_cur into @cname set @cname2='MarkPlans.'+@cname set @cname_new=UPPER(left(@cname,1))+SUBSTRING(@cname,2,len(@cname)-1) exec sp_rename @cname2,@cname_new,'column' end close test_cur --关闭游标 deallocate test_cur --删除游标
还有更犀利的,把一个数据库中所有表都修改过来。。
--一次性将一个数据库中的所有表的列名的第一个字母转换为大写 --声明第一个游标(获取数据库中所有表名) declare table_cur cursor for select name from sysobjects where xtype='u' --获取当前使用中的数据库的所有表名 open table_cur --打开游标 declare @TableName varchar(100) while @@FETCH_STATUS=0 begin fetch next from table_cur into @TableName --获取第一张表 declare test_cur cursor for --声明第二个游标 select name from syscolumns where id=object_id(@TableName) open test_cur while @@FETCH_STATUS=0 begin declare @cname varchar(100) declare @cname_old varchar(100) declare @cname_new varchar(100) fetch next from test_cur into @cname set @cname_old=@TableName+'.'+@cname set @cname_new=UPPER(left(@cname,1))+SUBSTRING(@cname,2,len(@cname)-1) print @cname_new exec sp_rename @cname_old,@cname_new,'column'--执行修改 deallocate test_cur --删除列游标 end end close table_cur
当然,针对上面这个,你也可以封装成一个函数或者存储过程啥,然后调用的时候,直接传数据库名就OK了。记得动态use下。
您还可以再加一个,一次性把所有当前实例所有数据库所有表都改过来,就是在加个游标,感觉没啥实用,就不写了。。。有需要的自己写吧
本文从百度空间搬家到博客园。。