2015-06-05 8 views
4

Мы пытаемся перейти на SQL Server 2014. Есть несколько случаев, когда нам нужно использовать OpenQuery для возвращения динамических результатов. Наборы результатов будут отличаться в зависимости от разных входных параметров. Он работал в sql 2008R2, и мне нужно, чтобы он работал. Но есть ошибка, которую я не могу решить.OpenQuery и использование динамического SQL

метаданные не может быть определена, так как утверждение 'EXEC (@sQry)' в процедуре 'spTest' содержит динамический SQL. Рассмотрим , используя предложение WITH RESULT SETS, чтобы явно описать результат. set.

Я попытался с наборами результатов undefined, но все еще такая же ошибка.

SELECT * INTO tblTest 
    FROM OPENQUERY(LinkedServer, 'SET FMTONLY OFF EXEC spTest ''27'', null, null, null, ''%, Employed'' WITH RESULT SETS UNDEFINED') 

Есть ли альтернативы или обойти это.
Спасибо заранее.

+0

Вы пытались определить результирующие наборы? Я имею в виду, перечисляя поля. –

+0

Я не могу определить результирующий набор. Существует множество отчетов, извлекающих данные из этой хранимой процедуры, и, как я сказал, с разными входными параметрами, у меня бы были разные результирующие наборы. Мне нужно оставить наборы результатов неопределенными, но это не сработает. – Leila

ответ

1

Работает, но вам это не понравится. Вам необходимо создать процедуру обертки, которая будет определять метаданные и выполнить оригинальную процедуру, основываясь на том, какие столбцы поставляются в оболочку. Вот ссылка на блог MSDN, где они обсуждают это для sp_help_job;

http://blogs.msdn.com/b/sqlagent/archive/2012/07/12/workaround-sql-server-2012-openrowset-on-msdb-dbo-sp-help-job-throws-error.aspx

Он работал в 2008 году, потому что SSIS и это иже будет выглядеть в процедуре, чтобы найти типы данных, 2012 не так играть, если есть какая-либо двусмысленность вообще хотят метаданные. Обертка поможет вам хромать, но я бы предложил привести процедуру в соответствие с современными стандартами кодирования. В любом случае надеюсь, что это поможет!

+1

Спасибо, Рэндалл, ты прав. Мне не нравится этот подход на самом деле, но я думаю, что я должен это сделать, поскольку до сих пор нет ничего. Хотелось бы, чтобы мы потратили некоторое время, чтобы перепроектировать его более подходящим образом. – Leila

Смежные вопросы