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


    今天遇到的一个需求,主管要求需要把所有的列名第一个字母改为大写,想着吧。手动改,丫的,改到天昏地暗都不知道什么时候能改完。就写了堆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/ 可以白手起家不可手无寸铁!我是我命运的主宰者,我是我灵魂的掌舵人! 每一次的选择都将是一个挑战!
  • 相关阅读:
    Sql server 中count(1) 与 sum(1) 那个更快?
    Sql server 中count() 与 sum() 的区别
    ASP.Net Core 运行错误 Http Error 502.5 解决办法
    什么是语法糖?
    int和Integer有什么区别?如何相互转换呢?
    面向对象的基本特征有哪些方面?
    谈谈final finally finalize区别
    Overload和Override的区别
    String s=new String(“xyz”);创建了几个String Object?
    Gc是什么?为什么要有Gc?
  • 原文地址:https://www.cnblogs.com/yunanwu/p/4168577.html
Copyright © 2020-2023  润新知