【发布时间】:2014-02-17 16:31:14
【问题描述】:
假设我有一张如下表:
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:违反主键约束“...”。无法在对象“dbo.ProposalDetails”中插入重复键。重复键值为 (1)。
批量更新不适用于 IDENTITY 列吗?
我在 SqlServer 2008 上。
【问题讨论】:
标签: sql sql-server sql-server-2008 jdbc prepared-statement