我写了存储过程,需要在一个数据库里往另一个数据库的表中插入数据,可是提示“rollback transaction 请求没有对应的 begin transact

  • 主题发起人 主题发起人 litian2
  • 开始时间 开始时间
把存储过程贴上来看看,可能要加begin ... end;吧
 
insert into BA_Message..BAM_Z002(ybnd,ybbh,xflx,xfje,zhzf,xjzf,jjzf,xfsj)<br>values(@YBND,@GRBH,@zyLX,@YLFY,@ZHZF,@XJZF,@TCJJZF, GETDATE())<br>这是往另外一个数据库的表里插数据的语句,去掉这句就没问题,一加上就有上面的错误。
 
是SQL Server 2000吗?如果是,你可以在企业管理器里调试一下,登录a库,执行你的语句,也可能是语法或数据库的设置问题。
 
语句分开执行是没有问题的,关键就是在一个数据库的存储过程操作另一个数据库的表里就会出现那个错误,郁闷的不行,急的要死。
 
是不是你的过程包含多个事务,可能在等待的时候,由于某个原因导致事务进行回滚。<br>还有 &nbsp;用dbcc &nbsp; checkdb &nbsp; ('数据库名')检查一下有没有一致性错误和分配错误。
 
没有的,只是加上操作其他数据库的语句就会出错,如果同样的表建在同一个数据库里就不会出现问题。<br>大家救命呀,只要能够实现往另一个数据库写数据就可以,不用非得是存储过程的。
 
你看看你在定义一个变量后它的初始值是否为空?还有表里的主键是不允许为空的,这句<br>insert into BA_Message..BAM_Z002(ybnd,ybbh,xflx,xfje,zhzf,xjzf,jjzf,xfsj)<br>values(@YBND,@GRBH,@zyLX,@YLFY,@ZHZF,@XJZF,@TCJJZF, GETDATE())中的变量@YBND,@GRBH,@zyLX,@YLFY,@ZHZF,@XJZF,@TCJJZF有没有为空的?
 
这种跨数据库操作属于分布式事务处理,如果是SQL SERVER分布式事务要用BEGIN DISTRIBUTED TRANSACTION开始事务的
 
楼上的可能是正解,学习。
 
xinjinren2兄,能不能举例说明,原来的存储过程并没有利用事务。
 
xinjinren2兄,还是不行,有没有其他需要注意的方面?
 
我帮你看下吧
 
忘了说明了,两个数据库是在同一台服务器上的,不应该这么难弄呀,一加上往其他数据库写数据的语句就会出问题,一去掉就没弄了,郁闷呀。
 
清空BA_Message的日志再试试.
 
既然是存储过程就把你建的存储过程贴出来看看啊
 
同时保证你的两个数据库都是连接中,要独立开来
 
两个数据库在一台机器上应该没这么难弄,我经常在一台SQL2000的不同数据库之门导数据,没有发现有楼主的情况,你试试下面这个语句:<br>insert into BA_Message.dbo.BAM_Z002(ybnd,ybbh,xflx,xfje,zhzf,xjzf,jjzf,xfsj)<br>values(@YBND,@GRBH,@zyLX,@YLFY,@ZHZF,@XJZF,@TCJJZF, GETDATE())
 
后退
顶部