从不同的数据库中获取表的所有列

时间:2015-01-12 03:47:33

标签: sql-server database

有一种语法,我可以从不同的数据库中获取表的列?我尝试过使用select column_name from information_schema.columns where table_name = 'Database_Name.DBO.Table_Name'但它没有用。请帮帮我,这几天都这样做了。

4 个答案:

答案 0 :(得分:7)

你很亲密。 TABLE_NAME只有表格的名称。其余信息位于TABLE_CATALOG和TABLE_SCHEMA中。您可以使用要从中选择的目录限定information_schema:

select column_name from Database_Name.information_schema.columns
where table_name = 'Table_Name' AND table_schema = 'dbo'

答案 1 :(得分:0)

information_schema.columns系统表中的表名不具有Database_Name.DBO.Table_Name格式。它们只是将表名作为varchar值。所以试试这样:

USE Database_Name;
select column_name from information_schema.columns
where table_name = 'Table_Name'

答案 2 :(得分:0)

这是我发现的。每个数据库都有自己的information_schema视图,因此不会显示其他数据库中的信息。因此,如果要获取另一个数据库中表的列名,则必须使用该数据库的information_schema视图。

{database name} .information_schema

示例:

SET @Sql = CONCAT('INSERT INTO ', @DBName, '.dbo.colname_table (column_name) 
    SELECT COLUMN_NAME FROM ', @DBName, '.INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = ''table_name'' AND TABLE_SCHEMA = ''dbo'' 
    ORDER BY ORDINAL_POSITION');

EXECUTE sp_executesql @Sql;

其中@DBName是数据库的名称。

答案 3 :(得分:0)

这对我有用...

select column_name from information_schema.columns 
where table_name = 'Table_Name'

没有这部分

AND table_schema = 'dbo'