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.

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'

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'

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

2

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


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' )
            )
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.