2016-12-01 83 views
0

如果它是一個常規數據庫,我可以簡單地使用這個查詢來獲取所有表名和它們的數據庫列名的列表。如何在SQL 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 

但現在我需要連接到鏈接服務器數據庫,因此'使用'不能使用。 還有別的辦法嗎?

+3

在select語句中完全限定您的表。 '[linkedserver]。[databasename]。[dbo]。[tablename]' –

+0

但是你應該別名你的表。 3(和4)部分命名在選擇列表中已棄用。 –

+0

目的是一次列出一個鏈接服務器數據庫的每個表的每個列名。 WEI_DBA能讓你更具體地瞭解你的答案嗎? – user3486647

回答

1

在您的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 
+0

謝謝,但我收到此消息: Msg 7399,級別16,狀態1,行1 鏈接服務器「FBSample_test_ODBC」的OLE DB提供程序「MSDASQL」報告了錯誤。提供者沒有提供任何關於錯誤的信息。 消息7312,級別16,狀態1,行1 鏈接服務器「FBSample_test_ODBC」的OLE DB提供程序「MSDASQL」的架構或目錄的使用無效。提供了一個四部分名稱,但提供程序不公開必要的接口以使用目錄或模式。 – user3486647

+0

我未選中MSDASQL屬性中的「零級別」,但仍然是相同的錯誤。 – user3486647

+0

@ user3486647我在猜測2件事情之一...... 1您正在將sql服務作爲低權限帳戶運行,或者2因爲您使用ODBC連接器,所以必須使用'OPENQUERY'。看看這個視頻.... https://youtu.be/BtyMQsE8pvY – scsimon

0

要在@ scsimon的回答略有擴大......

(schema_id) As Schema_name不是非常有用,因爲它是真正的ID。要獲取具有實際模式名稱的所有表(及其列)的列表,可以使用:

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 
相關問題