2011-03-11 1 views
3

Есть ли какой-либо sql-оператор, используемый для изменения всех имен столбцов в UPPER CASE для всех таблиц в базе данных? MS SQL Server.Как изменить все имя столбца на 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. копию и выполнить результат выше

+0

Соглашение заключается в том, чтобы зарезервировать верхний регистр для ключевых слов SQL и более низкий (или смешанный) случай для объектов БД (имена базы данных, схемы, таблицы и столбца). – outis

+0

привет, ребята, я получил SQL, чтобы сделать это, но не уверен, что это правильно. – Ryan

+0

Просто, чтобы убедиться, я бы использовал 'QUOTENAME()', как в '' ... '+ QUOTENAME (b.name) +' ... ''. Фильтр 'b.type = 'U'' не нужен, поскольку все' object_id 'уникальны, я понимаю. –

ответ

3

Если вы обновляете приложение из SQL Server 2000 к более позднему изданию, и вы борется с чувствительностью к регистру SQL Server, я бы предложил вам изучить настройку совместимости SQL Server 2000, прежде чем делать резкие изменения t o база данных.

В SQL Server 2008 Management Studio

  1. правой кнопкой мыши базу данных и выберите properties в контекстном меню
  2. Перейти к Options странице
  3. В третьем раскрывающемся списке сверху. выберите Compatibility Level: SQL Server 2000

По крайней мере, это занимает много времени.

Редактировать: Поскольку появляется, что OP обновляет свою базу данных с SQL Server 2005 до «новой» базы данных на SQL Server 2005, вышеуказанная стратегия может оказаться не оптимальной.

+0

ye, как вы сказали, я обновляю приложение и борюсь с чувствительностью к регистру. Я использую 2005, и рассмотрю настройки. – Ryan

+0

Я сделал заявление pl/sql, чтобы сделать это изменение, когда я обновляю ORACLE, и он работает хорошо. Поэтому я думал, что это может сработать хорошо, если я внес некоторые изменения в него для размещения SQL-сервера, но, похоже, pl/sql полностью отличается от sql в sqlserver. – Ryan

+0

См. Мой пересмотренный ответ. Он работает как шарм :-) –

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' 

Для переименования каждого столбца.

+0

ничего себе! это круто, ткс! Я попробую. – Ryan

Смежные вопросы