Скрипт для поиска текстовых типов данных в SQL Server - PullRequest
0 голосов
/ 21 марта 2012

В моем экземпляре SQL Server есть несколько тысяч таблиц, и мне нужно начать преобразование устаревших устаревших типов данных в новую версию (текст в varchar (max)). Можно ли это написать в сценарии, чтобы я мог просто выполнить оператор SELECT, чтобы найти все это, не просматривая вручную каждую таблицу в экземпляре базы данных? ТИА

Ответы [ 3 ]

2 голосов
/ 21 марта 2012
SELECT OBJECT_SCHEMA_NAME([object_id]),
  OBJECT_NAME([object_id]),
  name
FROM sys.columns
WHERE system_type_id IN (35,99);

Вы даже можете сделать это, чтобы сгенерировать набор команд для изменения таблиц:

SELECT 'ALTER TABLE ' 
  + QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
  + '.' + QUOTENAME(OBJECT_NAME([object_id]))
  + ' ALTER COLUMN ' + QUOTENAME(name) 
  + ' ' + CASE system_type_id WHEN 99 THEN 'N' ELSE '' END
  + 'VARCHAR(MAX);'
FROM sys.columns
WHERE system_type_id IN (35,99);

Конечно, вы также захотите иметь дело с обнуляемостью и т. Д., Но это только отправная точка.

1 голос
/ 21 марта 2012

Для этого вы можете использовать INFORMATION_SCHEMA просмотров.

Пример

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'text'
0 голосов
/ 21 марта 2012

попробуйте

SELECT OBJECT_NAME(c.OBJECT_ID) TableName, c.name ColumnName,
    t.name, c.max_length, c.precision, c.scale
FROM sys.columns AS c
JOIN sys.types AS t ON c.user_type_id=t.user_type_id
WHERE t.name = 'text' 
ORDER BY c.OBJECT_ID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...