Поскольку я хочу, чтобы столбцы не были varchar(MAX)
Я хочу видеть максимальную длину данных для каждого столбца, чтобы решить, каким должен быть новый размер.
У меня есть этот запрос для нахождения всех моих (n)varchar(MAX)
столбцы.
SELECT [TABLE_NAME], [COLUMN_NAME]
FROM information_schema.columns
WHERE DATA_TYPE IN ('varchar', 'nvarchar')
AND CHARACTER_MAXIMUM_LENGTH = -1
ORDER BY TABLE_NAME, COLUMN_NAME
Например, у меня есть таблица клиентов, и среди результатов выводится следующая таблица для моих клиентов
+------------+--------------+
| TABLE_NAME | COLUMN_NAME |
+------------+--------------+
| customers | name |
| customers | address |
| customers | postal_code |
| customers | city |
| customers | email |
| customers | phone_number |
+------------+--------------+
. Выполнение следующих запросов:
SELECT MAX(DATALENGTH(name)) FROM customers
SELECT MAX(DATALENGTH(address)) FROM customers
SELECT MAX(DATALENGTH(postal_code)) FROM customers
SELECT MAX(DATALENGTH(city)) FROM customers
SELECT MAX(DATALENGTH(email)) FROM customers
SELECT MAX(DATALENGTH(phone_number)) FROM customers
Я могу получить желаемый результат, но мне бы очень хотелось, чтобы это был всего один запрос, возвращающий что-то вроде:
+------------+--------------+------------+
| TABLE_NAME | COLUMN_NAME | Datalength |
+------------+--------------+------------+
| customers | name | 93 |
| customers | address | 122 |
| customers | postal_code | 6 |
| customers | city | 44 |
| customers | email | 75 |
| customers | phone_number | 18 |
+------------+--------------+------------+
Я пытался
SELECT
[TABLE_NAME], [COLUMN_NAME],
(SELECT MAX(DATALENGTH(COLUMN_NAME))
FROM TABLE_NAME) AS 'MaxContentLength'
FROM information_schema.columns
WHERE DATA_TYPE IN ('varchar', 'nvarchar')
AND CHARACTER_MAXIMUM_LENGTH = -1
ORDER BY TABLE_NAME, COLUMN_NAME
Но я получаю эту ошибку:
Сообщение 208, Уровень 16, Состояние 1, строка 1
Неверное имя объекта 'TABLE_NAME'
Как исправитьэта проблема (или есть другой способ сделать то, что я хочу?)