分享方式:


空間數據 - sys.dm_db_objects_disabled_on_compatibility_level_change

適用於:SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體

列出 SQL Server 中因變更相容性層級而停用的索引和條件約束。 包含保存計算數據行的索引和條件約束,其表達式在升級或變更相容性層級之後將會停用空間 UDT。 使用此動態管理功能來判斷相容性層級變更的影響。

Transact-SQL 語法慣例

語法

sys.dm_db_objects_disabled_on_compatibility_level_change ( compatibility_level )   

引數

compatibility_level
int ,識別您打算設定的相容性層級。

傳回的資料表

資料行名稱 資料類型 描述
class int 1 = 條件約束

7 = 索引和堆積
class_desc nvarchar(60) 條件約束的 OBJECT 或 COLUMN

索引和堆積的 INDEX
major_id int 條件約束的物件識別碼

包含索引和堆積的數據表物件標識碼
minor_id int 條件約束的 NULL

索引和堆積的Index_id
dependency nvarchar(60) 導致條件約束或索引停用的相依性描述。 升級期間引發的警告中也會使用相同的值。 範例包括如下:

內建的「空間」

系統 UDT 的“geometry”

系統 UDT 方法的 “geography::P arse”

一般備註

當相容性層級變更時,會停用使用某些內部函數的持續性計算數據行。 此外,升級資料庫時,會停用使用任何 Geometry 或 Geography 方法的保存計算數據行。

哪些函式會停用保存的計算數據行?

在保存計算數據行的運算式中使用下列函式時,它們會導致在相容性層級從 80 變更為 90 時,參考這些數據行的索引和條件約束停用:

  • IsNumeric

當下列函式用於保存計算數據行的表達式時,它們會導致在相容性層級從 100 變更為 110 或更高版本時,參考這些數據行的索引和條件約束停用:

  • Soundex

  • Geography::GeomFromGML

  • Geography:: STGeomFromText

  • Geography:: STLineFromText

  • Geography::STPolyFromText

  • Geography:: STMPointFromText

  • Geography:: STMLineFromText

  • Geography:: STMPolyFromText

  • Geography:: STGeomCollFromText

  • Geography::STGeomFromWKB

  • Geography:: STLineFromWKB

  • Geography:: STPolyFromWKB

  • Geography:: STMPointFromWKB

  • Geography:: STMLineFromWKB

  • Geography:: STMPolyFromWKB

  • Geography:: STUnion

  • Geography:: STIntersection

  • Geography:: STDifference

  • Geography:: STSymDifference

  • 地理位置::STBuffer

  • Geography:: BufferWithTolerance

  • Geography:: Parse

  • Geography::Reduce

已停用對象的行為

索引數

如果叢集索引已停用,或強制使用非叢集索引,就會引發下列錯誤:「查詢處理器無法產生計劃,因為數據表或檢視表 』%.*ls' 上的索引 '%.*ls' 已停用。若要重新啟用這些物件,請在升級后重建索引,方法是呼叫 ALTER INDEX ON ...REBUILD

如果使用具有停用堆積的數據表,就會引發下列錯誤。 若要重新啟用這些物件,請藉由呼叫 ALTER INDEX ALL ON 來重建升級之後...REBUILD

// ErrorNumber: 8674  
// ErrorSeverity: EX_USER  
// ErrorFormat: The query processor is unable to produce a plan because the table or view '%.*ls' is disabled.  
// ErrorCause: The table has a disabled heap.   
// ErrorCorrectiveAction: Rebuild the disabled heap to enable it.   
// ErrorInserts: table or view name   
// ErrorOwner: mtintor   
// ErrorFirstProduct: SQL11  

如果您在在線作業期間嘗試重建堆積,就會引發錯誤。

檢查條件約束和外鍵

停用的檢查條件約束和外鍵不會引發錯誤。 不過,修改數據列時不會強制執行條件約束。 若要重新啟用這些物件,請在升級之後呼叫 ALTER TABLE ... 來檢查條件約束。CHECK CONSTRAINT

保存的計算數據行

由於無法停用單一數據行,因此停用叢集索引或堆積會停用整個數據表。

安全性

權限

需要 VIEW DATABASE STATE 許可權。

SQL Server 2022 和更新版本的權限

需要資料庫上的 VIEW DATABASE PERFORMANCE STATE 權限。

範例

下列範例示範sys.dm_db_objects_disabled_on_compatibility_level_change查詢,以尋找因將相容性層級變更為 120 而受到影響的物件。

SELECT * FROM sys.dm_db_objects_disabled_on_compatibility_level_change(120);  
GO