Encuentre todas las columnas de un determinado tipo en todas las tablas de una base de datos de SQL Server

84

¿Cómo puedo encontrar todas las columnas de un determinado tipo (por ejemplo NTEXT) en todas las tablas de una base de datos de SQL Server?

Estoy buscando una consulta SQL.

SwissCoder
fuente

Respuestas:

120

Puede utilizar la siguiente consulta para devolver campos

SELECT table_name [Table Name], column_name [Column Name]
FROM information_schema.columns where data_type = 'NTEXT'
rs.
fuente
3
Esto también incluirá vistas
Daniel
1
Esto también funcionará en Azure SQL (agosto de 2018) y lo usé para convertir columnas a nvarchar (max) porque NText quedará obsoleto. alter table [tablename] alter column [columnname] nvarchar(max). Puede usar LEN(..)etc. con nvarchar y no ntext.
JP Hellemons
@Daniel, si no desea que se incluyan las vistas, únase internamente a information_schema.tables, así:INNER JOIN INFORMATION_SCHEMA.TABLES t ON c.TABLE_NAME = t.TABLE_NAME AND t.TABLE_TYPE = 'BASE TABLE'
Mike P.
14

Vas a necesitar INFORMATION_SCHEMA. Prueba 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.
fuente
7

También puedes probar

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
Siete
fuente
2

Puede utilizar la vista del sistema INFORMATION_SCHEMA.COLUMNS. La data_typecolumna tiene lo que estás buscando.

Colin
fuente
2

Usé la siguiente declaración para encontrar todas las tablas que posiblemente podrían contener datos / archivos binarios.

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
fuente