1

настоящее время я использую заявление:Выполните процедуру на базы данных Advantage сервера с SQL Server 2008 с параметрами

select * from openquery(linkedserver, 'select a,b,c, from nameofview') rowset_1. 

То, что я хочу сделать, это вызвать хранимую процедуру в базе данных Advantage сервера, и передача параметры к нему. Потребность в этом важна, поскольку объем данных растет быстрыми темпами.

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

Если я могу передать параметры процедуре, и процедура уменьшит количество собранных данных, вместо того, чтобы отчет собрал все данные и затем уменьшил их, было бы здорово.

+1

[Вредные привычки пинать: с помощью SELECT, */опустить список столбцов] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/10/bad-habits-to-kick-using-select-omitting-the-column-list.aspx) - выберите ** только **, что вам ** действительно ** нужно! –

ответ

2

Использование хранимой процедуры аналогично выполнения запроса в Advantage,

select * from openquery(linkedserver, 'execute procedure nameofproc(p1, p2)') rowset_1 

Для определения хранимой процедуры, база данных должна быть определена в data dictionary. Эта процедура может быть реализована в DLL или SQL script

Более простой способ улучшить производительность может быть просто добавить, где положение, чтобы ограничить объем данных, возвращаемых сервером:

select * from openquery(linkedserver, 'select a,b,c, from nameofview WHERE ...') rowset_1