如何列出所有表格和SQL Server中链接服务器数据库的列名?

时间:2016-12-01 18:14:12

标签: sql-server linked-server

如果它是常规数据库,我可以简单地使用此查询来获取所有表名及其数据库列名的列表。

use [my_database_name]
GO

SELECT sys.tables.name AS Table_Name, 
       sys.columns.name AS Column_Name, 
       sys.columns.max_length, 
       (schema_id) As Schema_name

FROM sys.tables
    INNER JOIN sys.columns 
        ON sys.tables.OBJECT_ID=sys.columns.object_id

ORDER BY schema_name, sys.tables.name, sys.columns.name

但是现在我需要连接到链接服务器数据库,因此使用'无法使用。 还有另一种方式吗?

4 个答案:

答案 0 :(得分:2)

完全限定您的FROMJOIN中的关联服务器,并为其设置别名。

SELECT lst.name AS Table_Name, 
       lsc.name AS Column_Name, 
       lsc.max_length, 
       (schema_id) As Schema_name

FROM [SERVER].[DB].[sys].[tables] lst
    INNER JOIN [SERVER].[DB].[sys].[columns] lsc
        ON lst.OBJECT_ID=lsc.object_id

ORDER BY schema_name, lst.name, lsc.name

答案 1 :(得分:2)

稍微扩大@scsimon的答案......

SELECT s.name AS schema_name ,t.name AS table_Name ,c.name AS column_Name --,c.max_length FROM [SERVER].[DB].sys.tables t JOIN [SERVER].[DB].sys.schemas s ON t.schema_id = s.schema_id JOIN [SERVER].[DB].sys.columns c ON t.object_id = c.object_id --WHERE s.name = 'dbo' ORDER BY s.name, t.name, c.name 不是很有用,因为它确实是一个ID。要获取具有实际模式名称的所有表(及其列)的列表,可以使用:

false

答案 2 :(得分:0)

有列出的解决方案:

declare @temp table
(
    col1 varchar(255),
    col2 varchar(255),
    [name] varchar(255),
    [type] varchar(255),
    col3 varchar(255)
)
insert @temp exec sp_tables_ex 'Your_LinkedServer_Name'
select * from @temp

还打开一个光标:

DECLARE lstTables CURSOR FOR 
        select [name] from @temp

答案 3 :(得分:0)

系统存储过程 sp_tables 用于列出当前服务器的当前数据库中可用的表。您可以将 sp_tables_ex 用于链接服务器。以下返回指定服务器中可用表的列表:

EXEC sp_tables_ex @table_server = 'MYSQL_DB'