在Openrowset中执行存储过程以放入临时表

时间:2013-12-10 21:52:58

标签: sql-server

我花了一整天的时间试图解决这个问题并准备好帮助。

我正在尝试使用以下代码。 (由于显而易见的原因,用户和通行证被遗漏) 我正在从SSMS运行查询,并希望获取存储过程的内容并将其放在临时表中。你可以修改我的查询,以便它的工作原理。 :)

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

SELECT * INTO #MyTempTable FROM OPENROWSET('SQLNCLI', 'Server=SQL01\SQL2008R2;Database=ExtData;
Uid=xxxx;Pwd=xxxx',
     'EXEC sp_MonthlyInventoryStock')

这是我得到的错误:

  

配置选项'show advanced options'从1更改为1.运行RECONFIGURE语句进行安装   配置选项'Ad Hoc Distributed Queries'从1更改为1.运行RECONFIGURE语句进行安装   OLE DB提供程序“SQLNCLI10”用于链接服务器“(null)”返回消息“无效的授权规范”   OLE DB提供程序“SQLNCLI10”用于链接服务器“(null)”返回消息“无效的连接字符串属性”。

     

Msg 7399,Level 16,State 1,Line 3
  链接服务器“(null)”的OLE DB提供程序“SQLNCLI10”报告错误。身份验证失败   Msg 7303,Level 16,State 1,Line 3
  无法为链接服务器“(null)”初始化OLE DB提供程序“SQLNCLI10”的数据源对象。

2 个答案:

答案 0 :(得分:10)

先生。 Reband回答了这个问题。看起来连接字符串必须全部在同一行。

你还需要包括'SET FMTONLY OFF;并让S.P.将NOCOUNT设置为ON。

最终答案(连接字符串全部在一行上):

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

SELECT * INTO #MyTempTable 
FROM OPENROWSET('SQLNCLI'
                ,'Server=SQL01\SQL2008R2;Database=ExtData;Uid=xxxx;Pwd=xxxx'
                ,'SET FMTONLY OFF;SET NOCOUNT ON;EXEC sp_MonthlyInventoryStock')
GO

答案 1 :(得分:0)

就我而言,问题是由连接字符串中的额外空间引起的。

(局部); 空格可信

不工作:

SELECT  * 
FROM    OPENROWSET ('SQLNCLI','Server=(local); TRUSTED_CONNECTION=YES;'
  ,'exec master.dbo.sp_who')

工作一次

SELECT  * 
FROM    OPENROWSET ('SQLNCLI','Server=(local);TRUSTED_CONNECTION=YES;'
 ,'exec master.dbo.sp_who')