2014-02-17 40 views
0

假设我有一个表如下:BATCHUPDATE上标识列

CREATE TABLE [dbo].[ProposalDetails](
[ProposalId] Numeric(15,0) IDENTITY(1,1) NOT NULL, 
[ProjectProposalId] Numeric(15,0) NOT NULL, 
[projectId] Numeric(15,0) NOT NULL, 
CONSTRAINT [ProposalDetails$ProposalId] PRIMARY KEY CLUSTERED 
) 

试图插入多个记录作为批次以下面的方式 - (对标识列没有插入):

String sql = "INSERT INTO ProposalDetails" 
       + "(ProjectProposalId,projectId) VALUES" 
       + "(?,?)"; 
     preparedStatement= conn.prepareStatement(sql); 
     conn.setAutoCommit(false);//commit trasaction manually 

     for(int i = 0; i < arr.length(); i++){ 
      preparedStatement.setInt(1,...); 
      preparedStatement.setString(2,...); 
      preparedStatement.addBatch(); 
     } 
     preparedStatement.executeBatch(); 
     conn.commit(); 

这导致以下异常:

a.sql.BatchUpdateException:违反PRIMARY KEY约束'...'。无法在对象'dbo.ProposalDetails'中插入重复键。重复的键值是(1)。

batchupdate不适用于IDENTITY列吗?
我在SqlServer 2008上。

回答

0

由于您的PK仅仅是ProposalId列,并且身份可以自行处理,所以您缺少一些东西。

1)检查是否有触发器尝试在该表中插入不良值。

2)验证是否有任何同事离开与设置identity_insert ON的表。

3)检查另一个名为ProposalDetails的表是否有另一个Schema(除了dbo),但是有些细节不同。

4)您可以使用种子重新放回到路径。 http://technet.microsoft.com/pt-br/library/ms176057.aspx