延迟准备无法完成,3个SQL Server

时间:2017-06-14 22:51:04

标签: sql-server openrowset

我有3个SQL Server,我在使用OpenRowset时会遇到奇怪的行为。

假设:

  • 服务器1 = 192.168.1.1,
  • 服务器2 = 192.168.1.2,
  • 服务器3 = 192.168.1.3,
  • 服务器4 = 192.168.1.4

SQL:

SELECT a.* 
FROM OPENROWSET('SQLOLEDB', 
                'Data Source=192.168.1.1;Persist Security 
Info=True;uid=sa;pwd=password',  
                'SELECT * FROM  dfs_database.dbo.dfs_vehicledata ') AS a; 

这是一个奇怪的部分:如果我在服务器.3和.4上运行上述SQL语句,一切正常。

但是,如果我在服务器.2上运行SQL语句,我会得到:

  

OLE DB提供程序“SQLNCLI11”用于链接服务器“(null)”返回消息“延迟准备无法完成。”。

     

Msg 8180,Level 16,State 1,Line 7
  声明无法准备。

     

Msg 208,Level 16,State 1,Line 7
  无效的对象名称'dfs_database.dbo.dfs_vehicledata'。

那么当其他人的工作正常时,什么可能会使一个关系无效?有任何想法吗?它们都是SQL Server Express,并且所有报告都有SQLNCLI11提供程序。

2 个答案:

答案 0 :(得分:0)

使用OpenRowSet,它看起来像这样:

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO
OPENROWSET('SQLNCLI', 
'Server=ipHere\ExtentionNameifHas;Database=DBName;Uid=userName;PWD=Password;'
,'SET FMTONLY OFF;SET NOCOUNT ON;SELECT * FROM  
dfs_database.dbo.dfs_vehicledata'

答案 1 :(得分:0)

从错误日志中,尝试将OLE DB提供程序名称从“ SQLOLEDB”更改为“ SQLNCLI11”,以及 检查对象的位置。确保提供数据库,表等的完整位置。