SQL Server

SQL ServerのSELECT SQLで、明示的にロックしないように指定する方法

SQLの文法
記事内に商品プロモーションを含む場合があります

先日、SQL ServerのSQLをAccessのパススルークエリを介して実行していましたが、どうも他のSQL実行と競合してしまうようです。

Select文ですし、ロックはしないと思っていたのですがどうやらロック(競合)しているようです。

Accessでパススルークエリの作り方処理速度の問題やセキュリティの問題など、パススルークエリーを作らなければならないシーンが出てきます。 今日はパススルークエリーの作...

 

SQL ServerのSQL文には明示的にロックしない命令があります。

そこで、パススルークエリのSQLにnolock(ノーロック)を指定したところ競合せずに並列に処理を実行することができました。

ロックが気になっている方はお試しください。

SQL Serverのnolock構文

SELECT * FROM テーブル名 with (nolock)

SELECT * FROM テーブル名 AS T with (nolock)

※テーブル名の後ろに『with (nolock)』をつけます。where句やORDER句は『with (nolock)』の後に記述します。

 

postgresqlには SQLServerのNoLockに相当する構文はありません。

postgresqlのSELECT文は明示的に更新を伴うSELECTでなければロックしない仕様です。

<明示的に更新を伴うSELECT文とは…>

SELECT * FROM テーブル名 FOR UPDATE

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。