根据列名称查看多个表中的数据

时间:2014-01-15 16:52:58

标签: sql join

我想要实现的是根据列名从多个表中获取信息,然后从该结果中缩小范围。

有这样的效果:

select 
    top 3 * 
from 
    (Select TABLE_NAME From INFORMATION_SCHEMA.COLUMNS Where column_name = 'modify_id')
where
    MODIFY_ID = 'MULVEYR' or 
    MODIFY_ID = 'MULVEYR2' and 
    MODIFY_DATE > '12/31/2013'

如果可能的话,如果该表返回0结果,则不返回任何内容。具有该列的表的数量是188,这就是为什么我需要自动获取内容而不是写出或手动检查每个表的原因。

理想输出: 在188个表格中,让我们说只有50个表格中有我需要的信息(where子句),那么我只会看到这50个表格的前三行而不是其余133个表格的空白结果

2 个答案:

答案 0 :(得分:1)

如果我读对了你,你试图在所有表中搜索具有特定列的那个表,然后从每个表中返回一些记录。这是一个解决方案,但我警告你,它使用动态sql和游标,所以它很慢。

Declare cur_TableList Cursor
  For
    Select TABLE_SCHEMA, TABLE_NAME
    from INFORMATION_SCHEMA.COLUMNS
    Where COLUMN_NAME='modify_id';

Open cur_TableList
Fetch Next From cur_TableList
  Into @tblSchema, @tblName;

While @@FETCH_STATUS = 0
BEGIN
    Set @sqlStmt = N'Select Top 3 * From ' + @tblSchema + '.' + @tblName;
    Set @sqlStmt = @sqlStmt + ' where MODIFY_ID = ''MULVEYR'' or ';
    Set @sqlStmt = @sqlStmt + 'MODIFY_ID = ''MULVEYR2'' and ';
    Set @sqlStmt = @sqlStmt + 'MODIFY_DATE > ''12/31/2013'' ';

    Print @tblName;

    EXECUTE sp_executesql @sqlStmt ;

    Fetch Next From cur_TableList
      Into @tblSchema, @tblName;
END

CLOSE cur_TableList;
DEALLOCATE cur_TableList;

答案 1 :(得分:0)

尝试此查询: -

select top 3 x.* from 
(
select * from INFORMATION_SCHEMA.COLUMNS where column_name = 'modify_id'    
)x