是这样 我有一个事务临时表 RcvBusinessHSESSION
我在存储过程A中 往这个表里插入了一部分数据
然后我A里面会调用另一个存储过程B
这个B会查询A刚才插入到临时表中的数据。
但是当我查询的时候 就提示我 试图访问已经在使用的事务处理临时表。。
求大神们帮忙解决一下。。
有没有什么暴力使用的方法。。在线等临时表存储过程多个

解决方案 »

  1.   

    你搞的太复杂了吧事务结束前,别的连接时无法查询当前表中的内容的,
    比如你在一个窗口中begin traninsert into t1 values (1)别提交你再开一个窗口,select * from t1 试试看,查不到结果吧你的情况,不开事务的话,应该是可以的我试了下--第一个过程
    create PROCEDURE Test1
    -- Add the parameters for the stored procedure hereAS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;    -- Insert statements for procedure here
    if exists (select * from sys.objects where name='temp1' and type='U')
    drop table temp1
      select * into temp1 from Account
     
     exec test2
    END
    GO--第二个过程
    create PROCEDURE test2
    -- Add the parameters for the stored procedure here

    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;    -- Insert statements for procedure here
    select * from temp1

    END--这样是没问题的
    exec Test1
      

  2.   

    事务有ACID原子隔离属性,事务不提交前,其他的过程语句是访问不了还没有提交的数据,否则就成为dirty read了。
    可以通过with nolock来访问表,如select * from temptable (with nolock) with (nolock)
    但楼主的问题似乎简单问题复杂化了,完全可以在一个Stored procedure中处理完这些的
    例如--with transaction version
    begin tran
    insert into tmptable(..) values(..)
    commit
    select * from tmptable with (nolock)  where ...
     --without transaction version
    insert into tmptable(..) values(..)
    if @@rowcount >0
    begin
    select * from tmptable with (nolock)  where ...
    end
      

  3.   

    感谢您的热心回复。。可能我没表达清楚。。 我这个是  oracle数据库