如何将MS SQL Server的一个数据库中的所有表的所有列名更改为UPPER CASE?

时间:2011-03-11 08:04:58

标签: sql sql-server uppercase

是否有任何sql语句用于将数据库中所有表的所有列名更改为UPPER CASE? MS SQL Server。

我有一个sql来做,但不确定它是否正确。

  1. 在下面运行SQL

    select 'exec sp_rename '''+b.name+'.'+a.name+''','''+UPPER(a.name)+''',''column'''
    from syscolumns a, sysobjects b 
    where a.id=b.id and b.type='U' 
    order by b.name
    
  2. 复制并执行上面的结果

4 个答案:

答案 0 :(得分:3)

如果要将应用程序从 SQL Server 2000 升级到更高版本,并且您对SQL Server区分大小写感到困惑,我建议您先查看SQL Server 2000兼容性设置对数据库的重大改变。

在SQL Server 2008 Management Studio中

  1. 右键单击数据库,然后在上下文菜单中选择properties
  2. 转到Options页面
  3. 在第三个下拉列表中。选择Compatibility Level: SQL Server 2000
  4. 至少这很费时间。

    编辑:由于OP似乎将他的数据库从SQL Server 2005升级到SQL Server 2005上的“新”数据库,因此上述策略可能不是最佳策略。

答案 1 :(得分:2)

我认为没有一个命令可以做到这一点。

但是,您应该能够使用1或2个游标和类似的查询编写执行此操作的查询:

select t.name As TableName, c.Column_Name
from sys.tables t
INNER JOIN information_schema.columns c ON c.Table_Name = t.Name
ORDER BY t.name 

这应该返回数据库中的所有表和列。

然后使用:

sp_RENAME 'TableName.[OldColumnName]' , '[NewColumnName]', 'COLUMN'

重命名每列。

答案 2 :(得分:1)

简短回答 - 不。

如果你需要这样做(并且许多研究表明所有大写的名称都会降低可读性),你将不得不生成具有这些大写名称的新表,将数据从旧表复制到新表,删除旧表,重命名新表,并重新建立所有外键关系。

有充分理由这样做吗?

答案 3 :(得分:0)

扩展Bravax答案,这将为您提供要执行的命令列表

select 'sp_RENAME ''' + t.name + '.' + QUOTENAME(c.Column_Name) + ''', ''' + UPPER(c.Column_Name) + ''', ''COLUMN'';\n go' As Command
from sys.tables t
INNER JOIN information_schema.columns c ON c.Table_Name = t.Name
ORDER BY t.name 

如果要批量运行,则可能需要在行之间添加“ go”