Trova tutte le colonne di un determinato tipo in tutte le tabelle in un database di SQL Server


85

Come posso trovare tutte le colonne di un certo tipo (ad esempio NTEXT) in tutte le tabelle di un database SQL Server?

Sto cercando una query SQL.

Risposte:


122

È possibile utilizzare la seguente query per restituire i campi

SELECT table_name [Table Name], column_name [Column Name]
FROM information_schema.columns where data_type = 'NTEXT'

3
Ciò includerà anche le visualizzazioni
Daniele

1
Funzionerà anche su Azure SQL (agosto 2018) e l'ho usato per convertire le colonne in nvarchar (max) perché NText sarà deprecato. alter table [tablename] alter column [columnname] nvarchar(max). Puoi usare LEN(..)ecc. Con nvarchar e non con ntext.
JP Hellemons

@Daniel se non vuoi che le visualizzazioni siano incluse, entra a far parte di information_schema.tables, in questo modo:INNER JOIN INFORMATION_SCHEMA.TABLES t ON c.TABLE_NAME = t.TABLE_NAME AND t.TABLE_TYPE = 'BASE TABLE'
Mike P.

14

Avrai bisogno di INFORMATION_SCHEMA. Prova qualcosa come:

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

Inoltre puoi provare

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

È possibile utilizzare la vista di sistema INFORMATION_SCHEMA.COLUMNS. La data_typecolonna ha quello che stai cercando.


2

Ho usato la seguente istruzione per trovare tutte le tabelle che potrebbero contenere dati / file binari.

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' )
            )
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.