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

適用于:SQL Server (所有支援的版本)

許多來自舊版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

在使用者資料庫中參考時,在 2000 SQL Server 2000 (中宣告為已淘汰的系統資料表,例如syslanguagessyscacheobjects) ,現在會系結至sys架構中的反向相容性檢視。 由於 SQL Server 2000 的系統資料表已經過多個版本取代,所以此變更並非視為重大變更。

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

另請參閱

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