私は、完全なテーブルが行ではなくロックされるのはなぜですか?
create table temp
(
id int,
name varchar(10)
)
insert into temp values(1,'a');
をこのSQLを実行したが、その後私は、細かい
select 1 from temp where id = 1
すべてを実行します。その後、私は
select 1 from temp where id = 1
しかし、何も返されません。このとき、実行
それから私は、コミットされていない挿入を実行
SET NOCOUNT ON;
DECLARE @TranCount INT;
SET @TranCount = @@TRANCOUNT;
IF @TranCount = 0
BEGIN TRANSACTION
ELSE
SAVE TRANSACTION Insertorupdatedevicecatalog;
insert into temp values(2,'b')
。 2行目の代わりに完全なテーブルをロックするのはなぜですか?
テーブルがヒープ(通常のような一意のCIはありません)であるという事実は、ここで予期しないロックを引き起こします。この問題は、ID上に一意のCIを作成することで解決します。 – usr
私のローカルシステムでコードを実行しましたが、それを再現することはできません。 2番目の 'SELECT'は期待通りに1を返します。 – SchmitzIT
@SchmitzIT、私はこれを新しいデータベース、新しいインストールと新しいテーブル – user960567