相容性檢視 (Transact-SQL)
舊版 SQL Server 的許多系統資料表現在都當做一組檢視進行實作。 這些檢視就是所謂的相容性檢視,而且只是為了與舊版相容。 相容性檢視所公開的中繼資料與 SQL Server 2000 提供的中繼資料相同。 然而,相容性檢視並不會公開與 SQL Server 2005 和更新版本中所導入之功能相關的任何中繼資料。 因此,當您使用新功能時 (例如 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 |
|
grantor |
sysprotects |
|
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 傳回資料。