是否有任何sql语句用于将数据库中所有表的所有列名更改为UPPER CASE? MS SQL Server。
我有一个sql来做,但不确定它是否正确。
在下面运行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
复制并执行上面的结果
答案 0 :(得分:3)
如果要将应用程序从 SQL Server 2000 升级到更高版本,并且您对SQL Server区分大小写感到困惑,我建议您先查看SQL Server 2000兼容性设置对数据库的重大改变。
在SQL Server 2008 Management Studio中
properties
Options
页面Compatibility Level: SQL Server 2000
至少这很费时间。
编辑:由于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”