--第一
--select a001.tDateTime as tDateTime,a001.num as data1, a002.num as data2, a003.num as data3   from  
--                                                                      OPENROWSET('SQLOLEDB','127.0.0.1,1433'; 'sa'; 'ps','exec CMD.DBO.ss ''A01''') as a001
--                                                         inner   join OPENROWSET('SQLOLEDB','127.0.0.1,1433'; 'sa'; 'ps', 'exec CMD.DBO.ss ''A02''') as a002 on a001.tDateTime=a002.tDateTime 
--                                                         inner   join OPENROWSET('SQLOLEDB','127.0.0.1,1433'; 'sa'; 'ps','exec CMD.DBO.ss ''A03''') as a003 on a001.tDateTime=a003.tDateTime 
   
--用存储过程  exec CMD.DBO.ss 'A01' 与openrowset 结合用inner join 运行没有问题,结果也是预想的结果
 --第二
--Exec CMD.DBO.pro_yyyymmdd_Inc_Electric_ALL  'HOUR', 'EEDLUTCHXY17', '2008-06-01 9:53:49', '2009-1-30 10:09:24'
--单独执行此存储过程,完全正确。                                                 
select a001.时间 as tDateTime,a001.增量 as data1, a002.增量 as data2, a003.增量 as data3   from  
                                                                      OPENROWSET('SQLOLEDB','127.0.0.1,1433'; 'sa'; 'ps','Exec CMD.DBO.pro_yyyymmdd_Inc_Electric_ALL  ''HOUR'', ''EEDLUTCHXY17'', ''2008-06-01 9:53:49'', ''2009-1-30 10:09:24''') as a001
                                                         inner   join OPENROWSET('SQLOLEDB','127.0.0.1,1433'; 'sa'; 'ps','Exec CMD.DBO.pro_yyyymmdd_Inc_Electric_ALL  ''HOUR'', ''EEDLUTCHXY17'', ''2008-06-01 9:53:49'', ''2009-1-30 10:09:24''') as a002 on a001.时间=a002.时间 
                                                         inner   join OPENROWSET('SQLOLEDB','127.0.0.1,1433'; 'sa'; 'ps','Exec CMD.DBO.pro_yyyymmdd_Inc_Electric_ALL  ''HOUR'', ''EEDLUTCHXY17'', ''2008-06-01 9:53:49'', ''2009-1-30 10:09:24''') as a003 on a001.时间=a003.时间
--将上面的存储过程与openrowset 结合后,出现错误。
--未能对 OLE DB 提供程序 'SQLOLEDB' 执行查询。 提供程序未能支持必需的属性。 提供程序指出与其它属性或要求发生了冲突。
--[OLE/DB provider returned message: 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。]
--OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ICommandText::Execute returned 0x80040e21:  Exec CMD.DBO.pro_yyyymmdd_Inc_Electric_ALL  'HOUR', 'EEDLUTCHXY17', '2008-06-01 9:53:49', '2009-1-30 10:09:24'[PROPID=DBPROP_SERVERCURSOR VALUE=True STATUS=DBPROPSTATUS_CONFLICTING]]。--仅仅是更换了存储过程,而且每个存储过程写法也没看见有问题啊,怎么就错误了呢?
我最终还想把 这整个内容写成一个大的存储过程,因为要inner join 的数量不是固定的。哪位高手能帮忙写一下代码啊。能给出  实现数量不是固定的多存储过程之间inner join 的的代码的,额外另加20分。供测试的数据表如下:if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bxinlianxu]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[bxinlianxu]
GOCREATE TABLE [dbo].[bxinlianxu] (
[tDateTIme] [datetime] NULL ,
[cmName] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[num] [int] NULL 
) ON [PRIMARY]
GO
insert   bxinlianxu(tDateTIme,cmName,num)   values( '2008-10-10 08:00:00.000' , 'A01       ' , 3 )
insert   bxinlianxu(tDateTIme,cmName,num)   values( '2008-10-10 08:00:00.000' , 'A02       ' , 40 )
insert   bxinlianxu(tDateTIme,cmName,num)   values( '2008-10-10 08:00:00.000' , 'A03       ' , 8 )
insert   bxinlianxu(tDateTIme,cmName,num)   values( '2008-10-12 08:00:00.000' , 'A01       ' , 50 )
insert   bxinlianxu(tDateTIme,cmName,num)   values( '2008-10-12 08:00:00.000' , 'A02       ' , 11 )
insert   bxinlianxu(tDateTIme,cmName,num)   values( '2008-10-12 18:00:00.000' , 'A01       ' , 60 )
insert   bxinlianxu(tDateTIme,cmName,num)   values( '2008-10-12 18:00:00.000' , 'A02       ' , 18 )
insert   bxinlianxu(tDateTIme,cmName,num)   values( '2008-10-12 18:00:00.000' , 'A03       ' , 90 )
 

解决方案 »

  1.   

    存储过程  exec CMD.DBO.ss 'A01' 
    的源代码如下CREATE PROCEDURE dbo.ss   
    @sss varchar(50)
    ASselect tDateTime,num from cmd.dbo.bxinlianxu where cmname=@sss
    GO
      

  2.   

    按照你说的,在一个数据库里能实现,没有问题。
    但是我换了一个数据库,换了一个存储过程,怎么就不行了呢?,请帮我检查下。好几天没登录上了,不好意思。
    最好能帮我写一下   实现数量不是固定的多存储过程之间inner join 的的代码,额外另加20分。 
    --第一
    --select a001.tDateTime as tDateTime,a001.num as data1, a002.num as data2, a003.num as data3   from  
    --                                                                      OPENROWSET('SQLOLEDB','127.0.0.1,1433'; 'sa'; 'ps','exec CMD.DBO.ss ''A01''') as a001
    --                                                         inner   join OPENROWSET('SQLOLEDB','127.0.0.1,1433'; 'sa'; 'ps', 'exec CMD.DBO.ss ''A02''') as a002 on a001.tDateTime=a002.tDateTime 
    --                                                         inner   join OPENROWSET('SQLOLEDB','127.0.0.1,1433'; 'sa'; 'ps','exec CMD.DBO.ss ''A03''') as a003 on a001.tDateTime=a003.tDateTime 
       
    --用存储过程  exec CMD.DBO.ss 'A01' 与openrowset 结合用inner join 运行没有问题,结果也是预想的结果
     --第二
    --Exec CMD.DBO.pro_yyyymmdd_Inc_Electric_ALL  'HOUR', 'EEDLUTCHXY17', '2008-06-01 9:53:49', '2009-1-30 10:09:24'
    --单独执行此存储过程,完全正确。                                                 
    select a001.时间 as tDateTime,a001.增量 as data1, a002.增量 as data2, a003.增量 as data3   from  
                                                                          OPENROWSET('SQLOLEDB','127.0.0.1,1433'; 'sa'; 'ps','Exec CMD.DBO.pro_yyyymmdd_Inc_Electric_ALL  ''HOUR'', ''EEDLUTCHXY17'', ''2008-06-01 9:53:49'', ''2009-1-30 10:09:24''') as a001
                                                             inner   join OPENROWSET('SQLOLEDB','127.0.0.1,1433'; 'sa'; 'ps','Exec CMD.DBO.pro_yyyymmdd_Inc_Electric_ALL  ''HOUR'', ''EEDLUTCHXY17'', ''2008-06-01 9:53:49'', ''2009-1-30 10:09:24''') as a002 on a001.时间=a002.时间 
                                                             inner   join OPENROWSET('SQLOLEDB','127.0.0.1,1433'; 'sa'; 'ps','Exec CMD.DBO.pro_yyyymmdd_Inc_Electric_ALL  ''HOUR'', ''EEDLUTCHXY17'', ''2008-06-01 9:53:49'', ''2009-1-30 10:09:24''') as a003 on a001.时间=a003.时间
    --将上面的存储过程与openrowset 结合后,出现错误。
    --未能对 OLE DB 提供程序 'SQLOLEDB' 执行查询。 提供程序未能支持必需的属性。 提供程序指出与其它属性或要求发生了冲突。
    --[OLE/DB provider returned message: 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。]
    --OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ICommandText::Execute returned 0x80040e21:  Exec CMD.DBO.pro_yyyymmdd_Inc_Electric_ALL  'HOUR', 'EEDLUTCHXY17', '2008-06-01 9:53:49', '2009-1-30 10:09:24'[PROPID=DBPROP_SERVERCURSOR VALUE=True STATUS=DBPROPSTATUS_CONFLICTING]]。--仅仅是更换了存储过程,而且每个存储过程写法也没看见有问题啊,怎么就错误了呢?