2009-10-26 3 views
2

Я использую Openquey, который отлично работает на SQL Server 2005, у меня есть 1 сервер, который является SQL Server 2008, на котором это не работает.SQL Server - OPENQUERY

Если я запускаю следующее:

SELECT * 
FROM OPENQUERY([Manchester], 
     '[Manchester].[PilotWebApp].[DBO].rsp_HandheldPerformance ''10/01/2009'', 
     ''10/10/2009''') 

Я получаю эту ошибку:

Cannot process the object "[Manchester].[PilotWebApp].[DBO].rsp_HandheldPerformance '10/01/2009', '10/10/2009'". 
The OLE DB provider "SQLNCLI" for linked server "Manchester" indicates that either the object has no columns or the current user does not have permissions on that object. 

Если я просто запустите:

[Manchester].[PilotWebApp].[DBO].rsp_HandheldPerformance '10/01/2009', '10/10/2009' 

он работает отлично. Что-то изменилось в 2008 году?

Что она делает это получает данные из OPENQUERY и вставок в мою временную таблицу:

INSERT #TempHandheldPerformance SELECT * FROM OPENQUERY([Manchester], '[Manchester].PilotWebApp.DBO.rsp_HandheldPerformance ''10/01/2009'', ''10/10/2009''') 

ответ

0

Убедитесь, что связанный сервер использует те же учетные данные, как вы. Вы можете найти их в свойствах связанного сервера, а затем в разделе «Параметры безопасности».

+0

уже проверено, что и там хорошо. как если бы я пытался и делал любые другие запросы на этом связанном сервере, он работал нормально – MartGriff

+0

Правильно ли установлен каталог по умолчанию? Включен ли «RPC Out» (требуется для вызовов хранимых процедур)? – Andomar

1

Проверьте и убедитесь, что в удаленном поле нет связанного сервера с именем [Манчестер]; ваш синтаксис может быть интерпретирован как:

Подключитесь с локального сервера на связанный сервер с именем Манчестер, а затем выполните сохраненный процесс на другом связанном сервере с именем Манчестер.

Stu

6

Даже вопрос это с 2009 года, у меня была та же проблема, ан 2012 !! и это было своего рода трудно найти ответ .... в любом случае просто используется SET NOCOUNT ON перед выполнением SP

если Манчестер является LinkedServer пример кода с SET NOCOUNT ON должен быть

SELECT * 
FROM OPENQUERY([Manchester], 
     'SET NOCOUNT ON; EXEC [PilotWebApp].[DBO].rsp_HandheldPerformance ''10/01/2009'', 
     ''10/10/2009''') 

И заполнить временную таблицу я

SELECT * 
INTO #temptable 
FROM OPENQUERY([Manchester], 
      'SET NOCOUNT ON; EXEC [PilotWebApp].[DBO].rsp_HandheldPerformance ''10/01/2009'', 
      ''10/10/2009''') 

https://stackoverflow.com/a/2247200/181766

+0

@thanks вы меня спасли –

1

Попробуйте добавить SET FMTONLY OFF; SET NOCOUNT ON; в запросе

SELECT * INTO #temptable FROM OPENQUERY([Manchester], 'SET FMTONLY OFF; SET NOCOUNT ON; EXEC [Manchester]. [PilotWebApp].[DBO].rsp_HandheldPerformance ''10/01/2009'', ''10/10/2009''') 
Смежные вопросы