我已经试过了,下面的SQL语句在企业管理器和查询分析器都可以执行,但是用应用程序就不可以,不知道是什么原因?INSERT INTO SRBBZY(NianYueDay,NianYue,Nian,JieSuanRen) Select isnull(a.日期,b.日期) as 日期,isnull(a.月份,b.月份) as 月份,isnull(a.年份,b.年份) as 年份,isnull(a.结算人,b.结算人) as 结算人  From(Select  JSNianYueDay as 日期,JieSuanRen as 结算人,Max(NianYue) AS 月份,Max(Nian) as 年份  From (select * from openrowset('SQLOLEDB','192.168.1.11';'sa';'samima',MyTable.dbo.uuu2) union Select * From uuu2_2 ) c WHERE JSNianYueDay>=20060912 And JSNianYueDay<=20060915  Group by JSNianYueDay,JieSuanRen )a FULL JOIN (Select  NianYueDay as 日期,LuRuRen as 结算人,Max(NianYue) AS 月份,Max(Nian) as 年份,SUM(case when YuCunFei!=0 And JieSuanRenZH='' then YuCunFei else 0 end) as 预交金额 From (select * from openrowset('SQLOLEDB','192.168.1.11';'sa';'samima',MyTable.dbo.uuu2) union Select * From uuu2_2 ) d WHERE NianYueDay>=20060912 And NianYueDay<=20060915 And YuCunFei!=0   Group by NianYueDay,LuRuRen )b  On a.日期=b.日期 AND a.结算人=b.结算人 Order by 日期

解决方案 »

  1.   

    报什么错误?无论用什么方式, sql语句都是在sql服务器上执行, 所以理论上应该是没有问题的.
      

  2.   

    该操作未能执行,因为 OLE DB 提供程序 'SQLOLE
      

  3.   

    我也这么想的,但是就是这样,还有,如果192.168.1.11 打开distributed transaction 功能,就不会说执行SQL失败,但是很久也不返回呀,我是第一次遇到这种理论和实际矛盾的情况。
      

  4.   

    楼主SQLServer验证类型是混合的不是?
      

  5.   

    如果是应用。数据库只能针对三个子段。超过三个子段是应用不了的,只能做为查询条件。不能做为更新条件.如:数据名.dbo.表名,本地的数据库互相更新就可以的。如果的局域网/广域肉内的数据库更新是不行的。超过三个子段如:连接服务器名.数据库名.dbo.表名这样的条件只能做查询。你把查询的结果生成本地表。你DTS导入到要更新的表就行了。然后再更新
      

  6.   

    ('SQLOLEDB','192.168.1.11';'sa';'samima',MyTable.dbo.uuu2) 等同
    连接服务器名.数据库名.dbo.表名这两种连接方式是相同的为4个子段
      

  7.   

    创建链接服务器,用OpenQuery()。
      

  8.   

    如果语句比较复杂,操作比较频繁的话,不建议使用openrowset来实现对远程数据库的操作
    可以考虑使用链接服务器来进行数据的操作--创建链接服务器
    EXEC sp_addlinkedserver '链接名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=链接服务器名;UID=sa;PWD=密码;'
    EXEC sp_addlinkedsrvlogin '链接名', 'false', NULL, 'sa', '密码'
    --执行语句
    insert into 链接名.数据库名.dbo.表名 select * from 表名
    --删除链接服务器
    exec sp_droplinkedsrvlogin '链接名',null
    exec sp_dropserver '链接名'
      

  9.   

    (select * from 
    (select * from openrowset
    ('SQLOLEDB','192.168.1.11';'sa';'samima',MyTable.dbo.uuu2) 
    union Select * From uuu2_2 )c1
    WHERE JSNianYueDay>=20060912 And 
    JSNianYueDay<=20060915  Group by JSNianYueDay,JieSuanRen)a
    加多一次select * from 
    下面的也是等同,加多一次
    用union 这样的连接 加多一次才能统计出来的数据才能准确。
    用union all 这样的执行速度快一点