2009-03-18 3 views
2

Как получить результаты (также передать параметр) удаленного сервера из хранимой процедуры?Выполнение «Просмотр», находящегося на удаленном сервере из хранимой процедуры

Вид находится на отдельном сервере с текущего сервера, где хранятся хранимые процедуры.

Спасибо.

ответ

0

Вы можете использовать Linked Server feature в SQL Server внутри хранимой процедуры:

Конфигурация связанного сервера позволяет Microsoft SQL Server для выполнения команд с источниками данных OLE DB на разных серверах. Связанные сервера предлагают следующие преимущества:

  • доступ к удаленному серверу

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

  • Возможность одинаково обращаться к различным источникам данных.

Вы должны написать запрос внутри хранимой процедуры таким образом, например:

SELECT * 
    FROM MyRemoteServer.MyDB.dbo.MyView 
    WHERE MyViewColumnX = @ParameterY 
+0

Изобразительное. Как насчет производительности? временная задержка ... и т. д. – Dhana

+0

Я использовал его в разных случаях, и это было хорошо для меня. Но вы должны это увидеть. Это может зависеть от того, как подключены серверы и т. Д. Сначала попробуйте выполнить запрос в Query Analyzer и посмотрите на последствия производительности. – splattne

+0

заботится о том, чтобы связанный сервер полностью квалифицировал имена доменов в хранимых процедурах! по опыту это одна из тех вещей, которые проскальзывают через сеть, когда базы данных мигрируют на новые серверы. Внезапные процессы начинают сбой на других машинах. –

0

Создать linked server на главном SQL Server, создавая ссылку на удаленный сервер.

Тот факт, что у вас есть вид на удаленном сервере, хорош, он обеспечивает уровень абстракции для ваших данных. Вы можете указать логин для связанного сервера, у которого есть разрешение на чтение только этого вида. Вы также можете изменить представление в будущем (добавьте предложение «где», например, чтобы повысить производительность), при этом не требуются изменения интерфейса.

Я также хотел бы добавить еще один вид на главном сервере, который выбирает с точки зрения на удаленном сервере: -

создать вид vwMain, как выбрать col1, col2 из RemoteServer.DB.dbo.RemoteView.

Таким образом, вы можете ссылаться на vwMain на протяжении всего вашего кода (во многих хранимых процедурах) без постоянного обращения к удаленному серверу. Таким образом, если ваш удаленный сервер изменится или вы переместите данные на ваш основной сервер, это одно простое изменение vwMain, и весь ваш код продолжает работать.

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