Junit 在表上打开IDENTITY_INSERT以加载DB单元

Junit 在表上打开IDENTITY_INSERT以加载DB单元,junit,sybase,dbunit,identity-column,identity-insert,Junit,Sybase,Dbunit,Identity Column,Identity Insert,我尝试加载一个表,该表有一个标识列,带有DB Unit。我希望能够自己设置id值(我不希望数据库为我生成它) 这是我的表的最小定义 create table X ( id numeric(10,0) IDENTITY PRIMARY KEY NOT NULL ) 要在X中插入一行,我执行以下SQL set INDENTITY_INSERT X ON insert into X(id) VALUES(666) 没问题。但是当我尝试用下面的db单元XML数据集(RS_7_10_minimal_

我尝试加载一个表,该表有一个标识列,带有DB Unit。我希望能够自己设置id值(我不希望数据库为我生成它)

这是我的表的最小定义

create table X (
 id numeric(10,0) IDENTITY PRIMARY KEY NOT NULL
)
要在X中插入一行,我执行以下SQL

set INDENTITY_INSERT X ON
insert into X(id) VALUES(666)
没问题。但是当我尝试用下面的db单元XML数据集(RS_7_10_minimal_ini.XML)加载这个表时

它失败了,出现以下异常

com.sybase.jdbc3.jdbc.SybSQLException: Explicit value specified for identity field in table 'X' when 'SET IDENTITY_INSERT' is OFF.
在插入指定了标识列值的行之前,DB单元似乎没有打开标识

我已经尝试在从JdbcDataBaseTester检索到的连接上执行我自己,但没有成功。可能是一个新的连接,也可能不是用于将数据推入de DB的相同连接

有什么想法吗

非常感谢大家的帮助


八度音阶

对DBUnit不够熟悉,无法帮助您了解细节;但在类似的情况下,我使用了一个表截断并重新播种标识值

dbcc checkident 

是的,实际上在DBUnit常见问题解答中找到了解决方案

我可以将DbUnit与标识列或自动增量列一起使用吗

许多RDBMS允许使用客户端值隐式覆盖标识列和自动增量列。DbUnit可以本机与这些RDBMS一起使用。一些数据库,如MS SQL Server和Sybase,需要显式激活客户端值。激活此功能的方式取决于供应商。 DbUnit通过InsertIdentityOperation类为MS SQL Server提供此功能

虽然它是为MS SQL Server编写的,但它也适用于Sybase。所以我用

    new InsertIndentityOperation(DatabaseOperation.CLEAN_INSERT).execute(connection,initialDataSet); 
等等


谢谢您的回答,罗海瑟。

这是打字错误还是名称改为InsertIdentityOperation?在我的
getSetUpOperation()
中,我使用了
returnnewinsertidentityoperation(DatabaseOperation.CLEAN\u INSERT)
dbcc checkident 
    new InsertIndentityOperation(DatabaseOperation.CLEAN_INSERT).execute(connection,initialDataSet);