ID セットを持つ SQL テーブルがあります。
CREATE TABLE MyTable(
MyTableID int IDENTITY(1,1) NOT NULL,
RecordName nvarchar(100) NULL)
このテーブルに何かが発生したため、異常な動作が発生しました。私は何を見つける必要があります。
挿入が発生すると:
INSERT MyTable(RecordName)
VALUES('Test Bug')
SELECT SCOPE_IDENTITY() -- returns 0
SELECT * FROM MyTable -- displays: 0, 'Test Bug'
この挿入の上のコードは最初の ID が であることを想定しているため、これは1
問題IDENTITY(1,1)
です0
。
(を実行する前にINSERT
)IDを確認すると、nullが返されます:
DBCC CHECKIDENT (MyTable, NORESEED)
ID 情報をチェックしています: 現在の ID 値 'NULL'、現在の列値 'NULL'。
これを修正する方法はいくつか知っています。そもそもテーブルがどのようにしてこの状態になったのかを知る必要があるのは何ですか?
null を返すことがわかっている唯一の方法CHECKIDENT
は、テーブルが作成されたばかりの場合ですが、それIDENTITY(1,1)
が尊重され、INSERT
原因SCOPE_IDENTITY()
が1
.
別の方法として、現在のシード (または with ) として0
強制すると、次の ID として取得できますが、チェックは現在のシード (null ではなく) を報告するため、これは起こり得ません。-1
DBCC CHECKIDENT (MyTable, RESEED, -1)
SET IDENTITY_INSERT MyTable ON
-1
データベースはどのようにして、列がnull を返し、次のIDENTITY(1,1)
原因がになる状態になったのでしょうか?DBCC CHECKIDENT (MyTable, NORESEED)
INSERT
SCOPE_IDENTITY()
0