[SQL Database] Insert クエリにおいて使用制限されている Table ヒントについて

皆さんこんにちは。 SQL Server/SQL Database サポートを担当しております藤野です。

SQL Database (旧 SQL Azure) では、以下に案内されている通り、ヒント句をサポートしておりますが、一部のヒント句は使用することができません。

サポートされている Transact-SQL ステートメント (Windows Azure SQL データベース)
https://msdn.microsoft.com/ja-JP/library/windowsazure/ee336270.aspx

ヒントのサポート
https://msdn.microsoft.com/ja-jp/library/windowsazure/ee336270.aspx#bkmk_query

------
ヒントのサポート
ヒントは、SELECT、INSERT、UPDATE、DELETE、MERGE の各ステートメントを実行するクエリ プロセッサに対し、実行上のオプションや方針を指定するものです。Windows Azure SQL データベースでは、わずかな例外を除き、SQL Server が備えているあらゆる Query ヒント、Table ヒント、および Join Hintsがサポートされます。クエリの実行中は必ず、Windows Azure SQL データベースによって max degree of parallelism が自動的に 1 に設定されるため、MAXDOP ヒントは、使用したとしても無視されます。また、SQL データベースは、PAGLOCK テーブル ヒントをサポートしません。
-------

今回は INSERT クエリにおいて、使用制限されているTable ヒントを紹介します。

SQL Database では、INSERT クエリにおいて以下のヒント句を使用することはできません。

1.KEEPIDENTITY
2.KEEPDEFAULTS
3.IGNORE_CONSTRAINTS
4.IGNORE_TRIGGERS
5.HOLDLOCK
6.NOLOCK
7.PAGLOCK
8.READCOMMITTEDLOCK
9.READPAST
10.READUNCOMMITTED
11.REPEATABLEREAD
12.SERIALIZABLE
13.UPDLOCK
14.SPATIAL_WINDOW_MAX_CELLS

 

使用した場合、以下のエラーが発生いたします。

INSERT INTO test WITH(UPDLOCK) VALUES(1)

----

Msg 40512, Level 16, State 1, Line 1
Deprecated feature 'INSERT_HINTS' is not supported in this version of SQL Server.

 

そのため、上記ヒント句がステートメント内に含まれる場合は削除した上で、クエリを実行ください。

尚、INSERT 句で使用できるヒント句においても、将来のバージョンの SQL Server では削除される予定です。 新しい開発作業では、これらのオプションの使用は避け、現在 ヒント句を使用している Insert クエリを使用している場合は、アプリケーションを修正することをお勧めします。

 

※ 本Blogの内容は、2012年10月 現在の内容となっております。