查詢 SQL Server 系統目錄

不是以硬式編碼來操作一組特定資料表和檢視的動態應用程式,必須能夠判斷所連接資料庫物件的結構與屬性。這些應用程式可能需要的資訊如下:

  • 資料庫中資料表與檢視的代碼和名稱。
  • 資料表或檢視中的資料行數目,並包含每個資料行的名稱、資料類型、小數位數和有效位數。
  • 資料表中定義的條件約束。
  • 為資料表定義的索引和索引鍵。

SQL Server 2005 系統目錄為 SQL Server 資料庫提供此資訊。SQL Server 2005 系統目錄的核心是一組檢視,以顯示中繼資料來說明 SQL Server 執行個體中的物件。中繼資料是用來描述系統中之物件屬性的資料。SQL Server 型的應用程式可利用下列管道來存取系統目錄中的資訊:

  • 目錄檢視。建議採用此存取方法。
  • 資訊結構描述檢視。
  • OLE DB 結構描述資料列集。
  • ODBC 目錄函數。
  • 系統預存程序和函數。

目錄檢視

SQL Server 2005 導入目錄檢視來作為系統目錄中繼資料的全新關聯式介面。這些檢視會提供您存取權,讓您存取儲存在伺服器中每一個資料庫的中繼資料。

ms189082.note(zh-tw,SQL.90).gif附註:
目錄檢視不提供存取複寫、SQL Server Agent 或備份中繼資料。

建議您使用目錄檢視來存取中繼資料,原因如下:

  • 所有中繼資料都可以用目錄檢視來取得。
  • 無論目錄資料表的實作方法為何,目錄檢視都是以獨立的格式來顯示中繼資料,因此目錄檢視不會因為基礎目錄資料表中的變更而受到影響。
  • 目錄檢視是存取核心伺服器中繼資料最有效率的方法。
  • 目錄檢視是存取目錄中繼資料的一般介面,提供最直接的方式來取得、轉換及顯示此中繼資料的自訂表單。
  • 目錄檢視名稱及其資料行的名稱都是描述性的。使用者只要對所查詢之中繼資料的對應功能有適度的瞭解,查詢結果通常都會與使用者的預期相符。
ms189082.note(zh-tw,SQL.90).gif重要事項:
在 SQL Server 的未來版本中,Microsoft 可能會在資料行清單結尾加入資料行,擴充任何系統目錄檢視的定義。建議不要在實際執行的程式碼中使用 SELECT * FROM sys.catalog_view_name,因為傳回的資料行數可能會變更和破壞應用程式。

如需使用目錄檢視查詢系統目錄的範例,請參閱<查詢 SQL Server 系統目錄 FAQ>。

資訊結構描述檢視

資訊結構描述檢視是以 SQL-92 標準中的目錄檢視定義為基礎。無論目錄資料表的實作方法為何,資訊結構描述檢視都是以獨立的格式來顯示目錄資訊,因此不會因為基礎目錄資料表中的變更而受到影響。使用這些檢視的應用程式可以在異質性的 SQL-92 相容資料庫系統之間轉移。如需詳細資訊,請參閱<資訊結構描述檢視 (Transact-SQL)>。

ms189082.note(zh-tw,SQL.90).gif附註:
資訊結構描述檢視沒有包含 SQL Server 2005 特定的中繼資料。

相容性檢視

舊版 SQL Server 的許多系統資料表,現在都被當成 SQL Server 2005 中的一組檢視來實作。這些檢視就是所謂的相容性檢視,而且僅與舊版本相容。其所顯示的中繼資料與 SQL Server 2000 中所提供的相同。然而,這些檢視不會顯示與 SQL Server 2005 中所導入之功能相關的中繼資料。因此,當您使用新的功能時 (例如 Service Broker 或分割),必須轉為使用目錄檢視。這是個升級為目錄檢視的好理由。另一個升級為目錄檢視的理由,就是儲存使用者識別碼及類型識別碼的相容性檢視資料行,可能會傳回 NULL 或觸發程序算術溢位。這是因為您可以在 SQL Server 2005 中建立 32,767 個以上的使用者及資料類型。例如,假設您要建立 32,768 個使用者,並執行此查詢:SELECT * FROM sys.sysusers;如果 ARITHABORT 的設定為 ON,該查詢就會因為算術溢位錯誤而失敗。如果 ARITHABORT 的設定為 OFF,uid 資料行就會傳回 NULL。

為了避免這些問題,建議您升級為使用新的目錄檢視,以處理與日俱增的使用者識別碼及類型識別碼。

OLE DB 結構描述資料列集

OLE DB 規格定義 IDBSchemaRowset 介面,公開一組含有目錄資訊的結構描述資料列集。OLE DB 結構描述資料列集是一種標準方法,可顯示由不同 OLE DB 提供者所支援的目錄資訊。資料列集並不會受基礎目錄資料表的結構所影響。如需詳細資訊,請參閱<Schema Rowset Support (OLE DB)>。

SQL Native Client OLE DB 提供者支援 IDBSchemaRowset 的延伸模組,可報告分散式查詢中所使用之連結伺服器的目錄資訊。如需詳細資訊,請參閱<LINKEDSERVERS Rowset (OLE DB)>。

ODBC 目錄函數

ODBC 規格定義一組目錄函數,可傳回包含目錄資訊的結果集。這些函數是一種標準方法,可顯示由不同 ODBC 驅動程式所支援的目錄資訊。結果集並不會受基礎目錄資料表的結構所影響。

SQL Native Client ODBC 驅動程式支援兩種驅動程式專用的函數,可報告分散式查詢所使用之連結伺服器的目錄資訊。如需詳細資訊,請參閱<Using Catalog Functions>。

系統預存程序和函數

Transact-SQL 可定義伺服器系統預存程序,以及會傳回目錄資訊的系統函數。雖然這些預存程序和函數專屬於 SQL Server,但可以讓使用者不受基礎系統目錄資料表的結構所影響。如需詳細資訊,請參閱<中繼資料函數 (Transact-SQL)>和<系統預存程序 (Transact-SQL)>。

請參閱

工作

中繼資料可見性疑難排解

概念

查詢 SQL Server 系統目錄 FAQ

其他資源

系統檢視 (Transact-SQL)
系統資料表 (Transact-SQL)
目錄檢視 (Transact-SQL)
相容性檢視 (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助