Отложенная подготовка не может быть завершена, 3 сервера SQL

У меня есть 3 сервера SQL, и я получаю странное поведение с 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; 

Вот странная часть: если я запускаю приведенный выше оператор SQL на серверах.3 и.4, все работает нормально.

Однако, если я запускаю инструкцию SQL на сервере.2, я получаю:

Поставщик OLE DB "SQLNCLI11" для связанного сервера "(null)" вернул сообщение "Отложенная подготовка не может быть завершена".

Msg 8180, уровень 16, состояние 1, строка 7
Заявление (я) не может быть подготовлено.

Сообщение 208, Уровень 16, Состояние 1, Строка 7
Неверное имя объекта 'dfs_database.dbo.dfs_vehicledata'.

Так что может заставить одни отношения не работать, когда другие работают нормально? Есть идеи? Все они SQL Server Express, и все отчеты имеют поставщиков SQLNCLI11.

2 ответа

Решение

С помощью 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'

Из журнала ошибок попробуйте изменить имя поставщика OLE DB с "SQLOLEDB" на "SQLNCLI11", а также проверьте местоположение объекта. Обязательно укажите полное местоположение с базой данных, таблицей и т. Д.

Другие вопросы по тегам