用于列出包含具有特定名称的列的所有表的名称的查询

时间:2014-07-28 09:55:09

标签: sql-server

我有一个名为Database1的数据库,其中包含大量表。我试图识别所有具有名为Order Number的列的表,但手动遍历每个表将花费很长时间。

是否可以执行返回具有特定名称列的表的所有名称的查询?

我尝试了这一点,但它没有识别Database1,也没有column

SELECT TOP 100 * FROM Database1 WHERE column = 'Order Number'

2 个答案:

答案 0 :(得分:1)

使用以下查询,您可以获得列名为'订单号'的列表:

SELECT Schema_name(t.schema_id), 
       Object_name(t.object_id) 
FROM   sys.columns c 
       INNER JOIN sys.tables t 
               ON t.object_id = c.object_id 
WHERE  c.name = 'Order Number' 

并通过使用以下查询,您可以获得上表的记录:

DECLARE @ReturnValue NVARCHAR(max) = '' 

SELECT @ReturnValue = @ReturnValue + 'SELECT TOP(100) * FROM [' 
                      + Schema_name(t.schema_id) + '].[' 
                      + Object_name(t.object_id) + '] ' + Char(10) 
                      + Char(13) 
FROM   sys.columns c 
       INNER JOIN sys.tables t 
               ON t.object_id = c.object_id 
WHERE  c.name = 'Order Number' 

PRINT @ReturnValue -- Inorder to check your query 

EXEC(@ReturnValue) 

答案 1 :(得分:0)

    use Database1
    SELECT table_name FROM INFORMATION_SCHEMA.columns 
       WHERE column_name = 'Order Number'