Select语句看,也可以看到更新后的记录,数据应该还在缓冲区里面,所以能看到。
Update语句开始,SQL Server 已经没响应了,在企业管理器里打不开被更新的表,连字段都看不到,表应该是被锁了。lz可以通过管理员身份再看一个窗口看看表的状态。
至于把server服务关掉重启,update恢复原样,应该是关闭数据库,自动回滚了。所以,综合判断,还是dblink建立的有问题。

解决方案 »

  1.   

    楼上的,能不能帮我出出主意?还有,我这么做的原因是因为需要在Oracle中的一张表更新后,把它的内容拷贝到SQL Server里,一开始也试做用存储过程,在Oracle端有一个触发器,当表被更新时它就会执行SQL Server里的另一个存储过程(没直接从Oracle更新到SQL,原因是因为上面我问的问题),在SQL的存储过程里,它会执行
    Insert into File_Temp (Product,Part,Operation,MachineName,FNAME,FDIR) select * from  openquery(cim,'select Product,Part,Operation,MachineName,FNAME,FDIR from USER.FILEDOWN_TEMP')
    delete from opendatasource('MSDAORA','Data Source=cim;User ID=USER; Password=USER;')..[USER].[FILEDOWN_TEMP]
    我已经在创建此存储过程时设置了set ANSI_NULLS ON
    set ANSI_WARNINGS on,所以在SQL Server直接执行没问题,可从Oracle调用时,它会报错:7405,让我设置ANSI_NULLS 和 ANSI_WARNINGS的值,
    这有什么解决办法吗?
      

  2.   

    SET   ANSI_NULLS    ON,     
          ANSI_WARNINGS ON   
    lz可以baidu一下这两个参数的用法.
      

  3.   

    我正好也好请教个问题:怎样在本地oracle数据库环境下建立和远程sqlserver数据库的链接
    ,访问sqlserver里的表。
      

  4.   

    我的问题解决了,在tg4msql\admin的inittg4msql.ora文件里,添加一行:
    HS_FDS_TRANSACTION_MODEL=TWO_PHASE_COMMIT,也就是把HS_FDS_TRANSACTION_MODEL参数设为TWO_PHASE_COMMIT,这样在存储过程里就会自动提交了,
    这个参数的默认值为COMMIT什么的,这个设置需要在目标SQL Server数据中添加用户名和表,具体的可以看tg4msql带的说明文档。谢谢大家!
      

  5.   

    另外,还想请问,在Oracel里调用 SQL Server中存储过程的语句是什么?不管传的参数与目标存储过程的参数是否对应,我用
    "i"@meslink(tr_Product);    编译可以通过,但用
    "i"@meslink(tr_Product,tr_Part);就通不过,i是存储过程的名字,我一共要传六个参数,请问格式应该怎么写?