假设我有一张表如下:
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 :(得分:0)
由于您的PK仅是ProposalId列,并且身份可以自行处理,因此您可能缺少某些内容。
1)检查是否有触发器尝试在该表中插入错误值。
2)验证是否有任何同事离开了表设置了identity_insert。
3)检查是否有另一个模式(dbo除外)与另一个名为ProposalDetails的表但略有不同的列。
4)您可以使用重新种子将表格放回路径上。 http://technet.microsoft.com/pt-br/library/ms176057.aspx