在 SQL Server 数据库中查找所有表中特定类型的所有列

102

如何在SQL Server数据库中查找所有表格中特定类型(例如NTEXT)的所有列?

我需要一个SQL查询。

5个回答

147
你可以使用以下查询返回字段。
SELECT table_name [Table Name], column_name [Column Name]
FROM information_schema.columns where data_type = 'NTEXT'

3
这也将包括观点。 - Daniel
1
这也适用于Azure SQL(2018年8月),我用它将列转换为nvarchar(max),因为NText将被弃用。alter table [tablename] alter column [columnname] nvarchar(max)。您可以在nvarchar和ntext中使用LEN(..)等。 - 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' - Mike P.

18

您需要使用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'

8
此外,您可以尝试:

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

3
我曾使用以下语句来查找可能保存二进制数据/文件的所有表。
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' )
            )

2
您可以使用系统视图 INFORMATION_SCHEMA.COLUMNSdata_type列中包含您需要查找的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接