SQL Server 早期版本中的許多系統表現在都作為一組視圖實現。這些視圖稱為兼容性視圖,僅用于向后兼容。兼容性視圖公開的元數據在 SQL Server 2000 中也提供。但是,兼容性視圖不公開與在 SQL Server 2005 及更高版本中引入的功能有關的任何元數據。因此,當您使用新功能(例如 Service Broker 或分區)時,必須切換到使用目錄視圖。 升級到目錄視圖的另一個原因是,存儲用戶 ID 和類型 ID 的兼容性視圖列可能返回 NULL 或觸發算術溢出。這是因為您可以創建超過 32,767 個用戶、組和角色,以及超過 32,767 種數據類型。例如,如果要創建 32,768 個用戶,則可運行以下查詢:SELECT * FROM sys.sysusers。如果 ARITHABORT 設置為 ON,則查詢會失敗,并出現算術溢出錯誤。如果 ARITHABORT 設置為 OFF,則 uid 列返回 NULL。若要避免這些問題,建議您使用新增的目錄視圖,這些視圖可以處理增加的用戶 ID 和類型 ID 數目。下表列出了會出現此溢出的列。
這些視圖包含 Microsoft SQL Server 中由復制使用的信息。 使用這些視圖可以更輕松地訪問復制系統表中的數據。將某個用戶數據庫啟用為發布數據庫或訂閱數據庫時,便會在該數據庫中創建視圖。 從復制拓撲中刪除用戶數據庫時,便會刪除該數據庫中的所有復制對象。 訪問復制元數據的首選方法是使用復制存儲過程。
任何用戶都不應直接更改系統視圖。
動態管理視圖和函數
動態管理視圖和函數返回可用于監視服務器實例的運行狀況、診斷故障以及優化性能的服務器狀態信息。
動態管理視圖和函數返回特定于實現的內部狀態數據。在未來的 SQL Server 版本中,它們的架構和返回的數據可能會發生更改。因此,未來版本中的動態管理視圖和函數可能與 SQL Server 2008 中的動態管理視圖和函數不兼容
動態管理視圖和函數分為兩種類型:
服務器范圍內的動態管理視圖和函數。此類型需要具有該服務器的 VIEW SERVER STATE 權限。
數據庫范圍內的動態管理視圖和函數。此類型需要具有該數據庫的 VIEW DATABASE STATE 權限。
查詢動態管理視圖或函數需要對于對象具有 SELECT 權限以及 VIEW SERVER STATE 或 VIEW DATABASE STATE 權限。這樣您可以有選擇地限制用戶或登錄名對動態管理視圖和函數的訪問。為此,首先在 master 中創建用戶,然后拒絕該用戶對不希望被訪問的動態管理視圖或函數的 SELECT 權限。此后,無論該用戶的數據庫上下文如何,用戶都將無法選擇這些動態管理視圖或函數。
注意:由于 DENY 的優先級高,所以如果用戶被授予 VIEW SERVER STATE 權限但被拒絕 VIEW