我有一个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