一次性修改表中列名首字母为大写

今天遇到的一个需求,主管要求需要把所有的列名第一个字母改为大写,想着吧。手动改,丫的,改到天昏地暗都不知道什么时候能改完。就写了堆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下。

您还可以再加一个,一次性把所有当前实例所有数据库所有表都改过来,就是在加个游标,感觉没啥实用,就不写了。。。有需要的自己写吧

本文从百度空间搬家到博客园。。

邮箱:yunanwu@foxmail.com 微博:@提灯寻影(http://weibo.com/wuyunnan) 技术主页:http://www.cnblogs.com/yuanawu/ 可以白手起家不可手无寸铁!我是我命运的主宰者,我是我灵魂的掌舵人! 每一次的选择都将是一个挑战!
原文地址:https://www.cnblogs.com/yunanwu/p/4168577.html