Найти все столбцы определенного типа во всех таблицах базы данных SQL Server

85

Как я могу найти все столбцы определенного типа (например NTEXT) во всех таблицах в базе данных SQL Server?

Я ищу SQL-запрос.

SwissCoder
источник

Ответы:

122

Вы можете использовать следующий запрос для возврата полей

SELECT table_name [Table Name], column_name [Column Name]
FROM information_schema.columns where data_type = 'NTEXT'
rs.
источник
3
Это также будет включать просмотры
Даниэль
1
Это также будет работать в Azure SQL (август 2018 г.), и я использовал его для преобразования столбцов в nvarchar (max), потому что NText будет устаревшим. alter table [tablename] alter column [columnname] nvarchar(max). Вы можете использовать LEN(..)и т. Д. С nvarchar, а не ntext.
JP Hellemons
@Daniel, если вы не хотите, чтобы представления включались, внутреннее соединение в information_schema.tables, например:INNER JOIN INFORMATION_SCHEMA.TABLES t ON c.TABLE_NAME = t.TABLE_NAME AND t.TABLE_TYPE = 'BASE TABLE'
Майк П.
14

Вам понадобится INFORMATION_SCHEMA. Попробуйте что-нибудь вроде:

SELECT c.* from INFORMATION_SCHEMA.columns c
INNER JOIN INFORMATION_SCHEMA.tables t ON t.table_name = c.table_name
WHERE c.data_type = 'int' AND t.table_type = 'base table'
Джим Х.
источник
7

Также вы можете попробовать

SELECT OBJECT_NAME(c.OBJECT_ID) TableName, c.name ColumnName
FROM sys.columns AS c
JOIN sys.types AS t ON c.user_type_id=t.user_type_id
WHERE t.name = 'ntext'
ORDER BY c.OBJECT_ID;
GO
Семь
источник
2

Вы можете использовать системный вид INFORMATION_SCHEMA.COLUMNS. В data_typeстолбце есть то, что вы ищете.

Колин
источник
2

Я использовал следующее утверждение, чтобы найти все таблицы, которые могут содержать двоичные данные / файлы.

SELECT 
    table_name 
FROM 
    INFORMATION_SCHEMA.TABLES T 
WHERE 
    T.TABLE_CATALOG = 'MyDatabase' AND 
    EXISTS ( 
        SELECT * 
        FROM INFORMATION_SCHEMA.COLUMNS C 
        WHERE 
            C.TABLE_CATALOG = T.TABLE_CATALOG AND 
            C.TABLE_SCHEMA = T.TABLE_SCHEMA AND 
            C.TABLE_NAME = T.TABLE_NAME AND 
            ( C.DATA_TYPE  = 'binary' OR
             C.DATA_TYPE  = 'varbinary' OR 
            C.DATA_TYPE  = 'text' OR
            C.DATA_TYPE  = 'ntext' OR
            C.DATA_TYPE  = 'image' )
            )
SwissCoder
источник