我有一個SQL表的屬性集合:SQL身份(1,1)從0開始
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
之前)我檢查的身份返回null:
DBCC CHECKIDENT (MyTable, NORESEED)
檢查標識信息:當前標識值 'NULL',當前列值 'NULL'。
我知道幾種方法來解決這個問題;我需要知道桌子是如何進入這個狀態的呢?
我知道CHECKIDENT
返回null是如果表剛剛創建的唯一途徑,但隨後IDENTITY(1,1)
榮幸和INSERT
導致SCOPE_IDENTITY()
是1
。
或者我可以得到0
作爲下一個ID,如果我強迫-1
作爲當前種子(DBCC CHECKIDENT (MyTable, RESEED, -1)
或SET IDENTITY_INSERT MyTable ON
),但隨後的檢查報告說,當前-1
種子(而不是零),這樣就不會發生了什麼。
怎麼數據庫進入其中列有IDENTITY(1,1)
,DBCC CHECKIDENT (MyTable, NORESEED)
返回空的狀態,但未來INSERT
原因SCOPE_IDENTITY()
是0
?
我假設有一個觸發器表'MyTable'。 –
@HamletHakobyan該表沒有觸發器。 – Keith
重新創建表格後,您是否達到相同的結果? –