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

Get all columns of a table from a different database

是否有一种语法可以让我从不同的数据库中获取 table 的列?我试过使用 select column_name from information_schema.columns where table_name = 'Database_Name.DBO.Table_Name' 但它不起作用。请帮帮我,这几天一直在这样做。

你很接近。 TABLE_NAME 刚好是 table 的名字。其余信息在 TABLE_CATALOG 和 TABLE_SCHEMA 中。您可以使用您想要 select 的目录来限定 information_schema 来自:

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

information_schema.columns 系统 table 中的 table 名称没有 Database_Name.DBO.Table_Name 格式。他们只是将 Table 名称作为 varchar 值。所以像这样尝试:

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

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

{数据库名称}.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 是数据库的名称。

这对我有用...

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

没有这部分

AND table_schema = 'dbo'