系統相容性檢視 (Transact-SQL)

適用於:Microsoft Fabric 中 Microsoft Fabric倉儲中的 SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體 Azure SynapseAnalytics Analytics Platform System (PDW)SQL 分析端點

許多來自舊版 SQL Server 的系統數據表現在會實作為一組檢視。 這些檢視稱為相容性檢視,而且僅供回溯相容性使用。 相容性檢視會公開 SQL Server 2000 (8.x) 中可用的相同元數據。 不過,相容性檢視不會公開任何與 SQL Server 2005 (9.x) 和更新版本中引進之功能相關的元數據。 因此,當您使用 Service Broker 或數據分割等新功能時,您必須切換至使用目錄檢視。

升級至目錄檢視的另一個原因是儲存使用者標識碼和類型標識碼的相容性檢視數據行可能會傳回 NULL 或觸發算術溢位。 這是因為您可以建立超過 32,767 個使用者、群組和角色,以及 32,767 個數據類型。 例如,如果您要建立 32,768 個使用者,然後執行下列查詢: SELECT * FROM sys.sysusers。 如果 ARITHABORT 設定為 ON,查詢會失敗,並出現算術溢位錯誤。 如果 ARITHABORT 設定為 OFF, 則 uid 資料行會傳回 NULL。

若要避免這些問題,建議您使用新的目錄檢視來處理增加的使用者標識碼和類型標識碼數目。 下表列出受限於此溢位的數據行。

資料行名稱 相容性檢視 SQL Server 2005 檢視
xusertype syscolumns sys.columns
usertype syscolumns sys.columns
memberuid sysmembers sys.database_role_members
groupuid sysmembers sys.database_role_members
Uid sysobjects sys.objects
Uid sysprotects sys.database_permissions

sys.server_permissions
grantor sysprotects sys.database_permissions

sys.server_permissions
xusertype systypes sys.types
Uid systypes sys.types
Uid sysusers sys.database_principals
altuid sysusers sys.database_principals
Gid sysusers sys.database_principals
Uid syscacheobjects sys.dm_exec_plan_attributes
Uid sysprocesses sys.dm_exec_requests

在使用者資料庫中參考時,SQL Server 2000 中宣告為已淘汰的系統數據表(例如 syslanguages 或 syscacheobjects),現在會繫結至 sys 架構中的反向相容性檢視。 由於 SQL Server 2000 系統數據表已被取代為多個版本,因此此變更不會被視為重大變更。

範例:如果用戶在用戶資料庫中建立名為 syslanguages 的用戶數據表,在 SQL Server 2008 中,該資料庫中的 語句 SELECT * from dbo.syslanguages; 會從用戶數據表傳回值。 從 SQL Server 2012 開始,這種做法會從系統檢視 sys.syslanguages 傳回數據。

另請參閱

目錄檢視 (Transact-SQL)
將系統資料表對應至系統檢視 (Transact-SQL)