次の方法で共有


空間データ - sys.dm_db_objects_disabled_on_compatibility_level_change

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

SQL Server の互換性レベルの変更の結果として無効になるインデックスと制約を一覧表示します。 式で空間 UDT を使用する永続化された計算列を含むインデックスと制約は、互換性レベルのアップグレードまたは変更後に無効になります。 この動的管理機能を使用して、互換性レベルの変更の影響を判断します。

Transact-SQL 構文表記規則

構文

sys.dm_db_objects_disabled_on_compatibility_level_change ( compatibility_level )   

引数

compatibility_level
設定する予定の互換性レベルを識別する int

返されるテーブル

列名 データ型 説明
クラス int 1 = 制約

7 = インデックスとヒープ
class_desc nvarchar(60) 制約の場合は OBJECT または COLUMN

インデックスとヒープの INDEX
major_id int 制約の OBJECT ID

インデックスとヒープを含むテーブルの OBJECT ID
minor_id int 制約の場合は NULL

インデックスとヒープのIndex_id
dependency nvarchar(60) 制約またはインデックスが無効になる原因となっている依存関係の説明。 アップグレード中に発生する警告にも、同じ値が使用されます。 例では以下について説明します。

組み込み関数の "space"

システム UDT の場合は "geometry"

システム UDT のメソッドの場合は "geography::Parse"

全般的な解説

互換性レベルを変更すると、一部の組み込み関数を使用している保存される計算列が無効になります。 データベースをアップグレードすると、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

  • Geography:: 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

永続化された計算列

1 つの列を無効にすることはできないので、クラスター化インデックスまたはヒープを無効にすると、テーブル全体が無効になります。

セキュリティ

アクセス許可

VIEW DATABASE STATE 権限が必要です。

SQL Server 2022 以降でのアクセス許可

データベースに対する VIEW DATABASE PERFORMANCE STATE アクセス許可が必要です。

次の例は、互換性レベルを 120 に変更することで影響を受けるオブジェクトを検索する sys.dm_db_objects_disabled_on_compatibility_level_change に対するクエリを示しています。

SELECT * FROM sys.dm_db_objects_disabled_on_compatibility_level_change(120);  
GO