空間數據 - sys.dm_db_objects_disabled_on_compatibility_level_change
適用於:SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體
列出 SQL Server 中因變更相容性層級而停用的索引和條件約束。 包含保存計算數據行的索引和條件約束,其表達式在升級或變更相容性層級之後將會停用空間 UDT。 使用此動態管理功能來判斷相容性層級變更的影響。
語法
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