0

Я звоню процедуры из сервера B:процедура OpenQuery от связанного сервера

select * from openquery(A,'exec sp_qa2') 

sp_qa2 в сервере А это:

use master 
go 
create procedure sp_qa2 
begin 
declare @sql nvarchar(1000) 
SET @sql = 'USE [?]; EXEC [dbo].[sp_qa1]' 
EXEC sp_MSforeachdb @sql 
end 

и sp_qa1 в сервере А это:

create procedure sp_qa1 
begin 
declare @a int 
end 

Эта ошибка возвращается:

Msg 208, уровень 16, состояние 1, процедура sp_MSforeach_worker, строка 102 [Batch Start Line 2] Недопустимое имя объекта '#qtemp'.

Как это исправить?

+0

Похоже '# qtemp' не была создана в' sp_MSforeach_worker'. Можете ли вы отправить код из этой процедуры, где происходит эта ошибка? Кроме того, эта процедура не упоминается нигде в коде, который вы предоставили. Как это выполняется? – Aidan

+0

Эта таблица #qtemp в sp_MSforeach_worker - это системная процедура, которая у всех есть. Это не то, что я создал. – Sher

+0

Так оно и есть, мои извинения. – Aidan

ответ

0

Ваш RPC и RPC OUT вариант вашего Связанного сервера: TRUE?

Кроме того, вы можете напрямую выполнить код без OPENQUERY, как показано ниже:

EXEC [A].[database].[schema].sp_qa2 
+0

Да, это правда. Я знаю, что могу выполнить его, предоставив целое 4 имени. Я хочу делать OPENQUERY, потому что это лучше с точки зрения производительности. – Sher

+0

Получаете ли вы ту же ошибку, выполнив ее с 4-мя наименованиями? – p2k

+0

Ошибка при выполнении с помощью 4-разрядного наименования – Sher

0

вы также можете попробовать использовать:

EXEC(@sql) AT [RemoteServer]