最近在用 java 做sql server2000 事务时候发现一个问题,用查询分析器模拟了一下这个错误 set implicit_transactions oncreate table #test1(
  a int not null primary key,
  b datetime not null
)
go
insert #test1(a,b) values (1,'2001-01-01')
go
insert #test1(a,b) values (1,'57014-11-21 00:00:00')
go
select *  from #test1
go
commit
go
select *  from #test1
go就是在做 insert #test1(a,b) values (1,'57014-11-21 00:00:00') 有数据转换错误,应该属于编译错误,一旦发生这个情况 数据库就立刻回滚了,导致后续的一些操作全部报错误,请问有什么设置可以避免 编译错误引起的回滚吗SET XACT_ABORT off 只在运行时错误时候有用,这个不起作用。

解决方案 »

  1.   

    你为什么要加上:set implicit_transactions on?
      

  2.   


    因为是java开发,所以模拟了一下,不过估计 显性事务也是如此啊
      

  3.   

    发生错误了不想回滚?难道你想提交啊?
    建议你换一个思路,错误发生在插入了非法日期数据,可以从数据的源头断掉这些非法数据,也就是说在插入的时候用isdate函数做检测。
    只将符合日期格式的数据插入表中。
      

  4.   


    你的意思我当然懂,SET XACT_ABORT off,不也就是出错的时候不回滚吗,每个业务都有业务的规则,判断日期很简单,现在我只是从技术角度来分析如何不回滚,然后再考虑后续处理。比如把他扔到 错误队列里面之类的