直接select into到临时表: select * into #t from OPENROWSET(
'SQLOLEDB','SERVER=servername;uid=sa;pwd=123;Database=testdb',
'SET FMTONLY OFF;set nocount on;exec sp2 参数') as a
select * from #t
drop table #t

解决方案 »

  1.   

    to  pbsql(风云) 兄:
    有没有方法不指定 'SERVER=servername;uid=sa;pwd=123;Database=testdb' 这句呢?
      

  2.   

    --创建临时表结果与sp1返回的结果相同create table #t(...)
    insert #t exec sp1select * from #t
      

  3.   

    --可以这样写,就是要加多一个存储过程所在的库名:select * into #t
    from openrowset('sqloledb','Trusted_Connection=yes','SET FMTONLY OFF;set nocount on;exec 库名.dbo.sp2 参数')
      

  4.   

    --或者这样写吧,就不用在调用存储过程中指定库名,当然,连接字符串中就要字符串了select * into #t
    from openrowset('sqloledb','Trusted_Connection=yes;Database=testdb','SET FMTONLY OFF;set nocount on;exec sp2 参数')
      

  5.   

    谢谢各位大哥!
    用create table #t(...)肯定是不行的,因为这个SP2可能每次返回的结果集结构都不一样的,看来只能用:
    select * into #t
    from openrowset('sqloledb','Trusted_Connection=yes;Database=testdb','SET FMTONLY OFF;set nocount on;exec sp2 参数')我再试试!
      

  6.   

    大哥们,很抱歉我还是有点问题:
    select * into #t
    from openrowset('sqloledb','Trusted_Connection=yes;Database=testdb','SET FMTONLY OFF;set nocount on;exec sp2 参数')
    中的sp2 参数这怎么把它换成临时变量呢?因为SP2会变得,参数也变的,我用下面的不行:
    declare @strTmp varchar(1000)
    set @strTmp = 'SET FMTONLY OFF;set nocount on;exec ' + 'GetMyData 100,200,30'select * into #t
    from openrowset('sqloledb','Trusted_Connection=yes;Database=testdb',@strTmp)
      

  7.   

    那你只能生成处理语句,用exec了,因为openrowset不支持变量
      

  8.   

    当然,用exec的话,就要求你改用全局的临时表.