前提
複合キーのテーブルで、該当する1レコードだけに行ロックがかからない
実現したいこと
テーブル:TABLE1
列1 | 列2 | 列3 |
---|---|---|
01 | AA | 111 |
01 | BB | 110 |
01 | CC | 112 |
02 | AA | 113 |
02 | BB | 114 |
02 | CC | 112 |
上記のテーブルに対して
SELECT * FROM TABLE1 WITH(UPDLOCK,ROWLOCK) WHERE 列1='01' AND 列2='CC'
を実行すると、列1='01' の3レコードに行ロックがかかります。
(SQLServer Management Studioにてロックされているのを確認)
DB:SQLServer2019
キー項目:列1 char(2), 列2 char(2)
- リスト実際のDB名・テーブル名・項目名を置換したCREATE文を記載します。
USE [サンプルDB]
GO
/****** Object: Table [dbo].[TABLE1] Script Date: 2022/10/14 9:36:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TABLE1](
[列1] char NOT NULL,
[列2] char NOT NULL,
[列3] char NULL,
CONSTRAINT [PK_TABLE1] PRIMARY KEY CLUSTERED
(
[列1] ASC,
[列2] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
発生している問題・エラーメッセージ
上記のSQLを実行すると、(列1='01' AND 列2='CC') の1レコードだけでなく、(列1='01') の3レコードにロックがかかってしまいます。 行ロックを実行するテーブルには、複合キーにするのは好ましくないのでしょうか? ご存じの方がいらっしゃれば、ご教授いただきたく思います。
該当のソースコード
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答1件
あなたの回答
tips
プレビュー