3

是否有任何 sql 语句用于将数据库中所有表的所有列名更改为大写?微软 SQL 服务器。

我有一个 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

4 回答 4

3

如果您正在将应用程序从SQL Server 2000升级到更高版本,并且您正在为 SQL Server 区分大小写而苦苦挣扎,我建议您在对数据库进行重大更改之前查看 SQL Server 2000 兼容性设置。

在 SQL Server 2008 管理工作室中

  1. 右键单击数据库并properties在上下文菜单中选择
  2. 转到Options页面
  3. 在顶部的第三个下拉列表中。选择Compatibility Level: SQL Server 2000

至少那很耗时。

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

于 2011-03-11T08:11:33.257 回答
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'

重命名每一列。

于 2011-03-11T08:18:03.033 回答
1

简短的回答 - 不。

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

这样做有充分的理由吗?

于 2011-03-11T08:12:07.320 回答
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”

于 2019-07-26T00:56:08.487 回答