我有一個C#控制檯應用程序正在使用存儲過程將行插入SQL Server數據庫。目前這個數據庫有大約100萬行,但ID列最多隻有26米!無插入SQL Server身份列遞增
在上次成功插入的ID從16米到26米。該應用程序並行運行多個線程,因此有可能試圖在同一時間插入兩件事情。
除了事務回滾之外,是否還有其他事情會導致標識列增加而不添加行?
似乎不太可能有兩次線程試圖在同一時間寫入衝突行的1000萬次。
我使用的是通過傳遞XML到存儲過程填充的臨時表變量:
-- insert data if it doesn-t already exist
insert into DataStore (DataText, DataSourceID)
select distinct td.dataText, td.dataSource
from @tempData td
where not exists (select 'x'
from DataStore ds
where ds.DataText = td.dataText);
你必須有一個競爭條件。該模式不會在併發下工作[如此處所示](http://stackoverflow.com/questions/3407857/only-inserting-a-row-if-its-not-already-there) – 2011-12-28 11:37:36
「DataText」有一個它的唯一約束?也許你確實遇到過整個負載的回滾。 – 2011-12-28 11:44:08
'DataText'沒有約束,但是另一個列'DateCreated'(默認值爲'getdate()')的確有一個。 – finoutlook 2011-12-28 12:59:02