2017-06-14 43 views
2

我有3個SQL服務器,我得到奇怪的行爲與OpenRowset。推遲準備不能完成,3 SQL服務器

鑑於:

  • 服務器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語句,一切正常。

但是,如果我在服務器0.2運行SQL語句,我得到:

OLE DB提供程序「SQLNCLI11」鏈接服務器延遲準備「(空)」返回了消息」無法完成。 」。

Msg 8180,Level 16,State 1,Line 7
聲明無法準備。

消息208,級別16,狀態1,行7
無效的對象名稱'dfs_database.dbo.dfs_vehicledata'。

那麼當其他人工作正常時,什麼可能使一個關係不起作用?有任何想法嗎?它們都是SQL Server高速緩存,並且所有報告都有SQLNCLI11提供程序。

+0

你的錯誤信息說'無效的對象名稱dfs_database.dbo.dfs_vehicledata''。你確定你打的是正確的數據庫嗎?表名也可以通過開放式查詢區分大小寫。 – LordBaconPants

+0

您可以在本地運行該服務器上的相同查詢嗎? – Anton

+0

嘗試設置映射到該服務器的鏈接服務器,並檢查是否可以訪問那裏的任何對象。 – Anton

回答

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' 
+0

謝謝你,你有修復。事實證明,取代 數據源= 192.168.1.1 與 服務器= 25.100.85.28;數據庫= DFS_DATABASE 做了訣竅,即使當提供程序保留爲「SQLOLEDB」現在爲什麼只有一臺計算機需要調整好奇。 – Aaron