Как изменить каждый столбец nvarchar на varchar? - PullRequest
6 голосов
/ 03 декабря 2009

Какой самый простой способ заменить каждый столбец nvarchar в базе данных на varchar?

Я лично предпочел бы nvarchar, но в архиве данных указано, что должен использоваться varchar.

Ответы [ 3 ]

15 голосов
/ 03 декабря 2009

Здесь, чтобы вы начали:

Select 'Alter Table [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] Alter Column [' + COLUMN_NAME + '] VarChar(' + CAST(CHARACTER_MAXIMUM_LENGTH As VARCHAR) + ')'
From INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'NVARCHAR'

Это сгенерирует все необходимые операторы alter для вас (вырезать, вставить, запустить).

Обратите внимание, что это не учитывает никаких ограничений.

4 голосов
/ 09 декабря 2009

Чтобы обработать MAX и исключить изящные системные диаграммы:

SELECT 
'
ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] 
ALTER COLUMN [' + COLUMN_NAME + '] 
VARCHAR(' + 
    (CASE WHEN CHARACTER_MAXIMUM_LENGTH = -1 
        THEN 'MAX' 
        ELSE CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) 
    END)
 + ')
'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'NVARCHAR' AND TABLE_NAME <> 'SYSDIAGRAMS'
3 голосов
/ 03 декабря 2009

Попросить архив данных сделать это?

или

Создайте сценарий для всех объектов в вашей системе, измените затем nvarchar, затем создайте новую базу данных и импортируйте в нее данные из старой.

или

Написание сценариев изменения для обновления существующей базы данных.
(Это может быть лучшим подходом, если это производственная база данных или база данных клиента.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...