Encontre todas as colunas de um determinado tipo em todas as tabelas em um banco de dados SQL Server

84

Como posso encontrar todas as colunas de um determinado tipo (por exemplo NTEXT) em todas as tabelas em um banco de dados SQL Server?

Estou procurando uma consulta SQL.

SwissCoder
fonte

Respostas:

120

Você pode usar a seguinte consulta para retornar campos

SELECT table_name [Table Name], column_name [Column Name]
FROM information_schema.columns where data_type = 'NTEXT'
rs.
fonte
3
Isso também incluirá visualizações
Daniel
1
Isso também funcionará no Azure SQL (agosto de 2018) e usei-o para converter colunas em nvarchar (max) porque o NText será preterido. alter table [tablename] alter column [columnname] nvarchar(max). Você pode usar LEN(..)etc. com nvarchar e não ntext.
JP Hellemons
@Daniel se você não quiser que as visualizações sejam incluídas, junte-se interna em information_schema.tables, como:INNER JOIN INFORMATION_SCHEMA.TABLES t ON c.TABLE_NAME = t.TABLE_NAME AND t.TABLE_TYPE = 'BASE TABLE'
Mike P.
14

Você vai precisar de INFORMATION_SCHEMA. Experimente algo como:

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'
Jim H.
fonte
7

Você também pode tentar

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
Sete
fonte
2

Você pode usar a visualização do sistema INFORMATION_SCHEMA.COLUMNS. A data_typecoluna tem o que você procura.

Colin
fonte
2

Eu usei a seguinte instrução para encontrar todas as tabelas que poderiam conter dados / arquivos binários.

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
fonte