Какие проблемы возникают при создании и удалении связанного сервера только для выполнения удаленного запроса? - PullRequest
1 голос
/ 07 сентября 2010

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

Я используюВеб-сервер для выполнения работы «рукопожатия и проверки», но затем я подключаюсь непосредственно к удаленному серверу SQL для получения данных.

Веб-сервер вернет информацию для входа в систему (serverIP + Порт, база данных, пользователь и пароль), конечно, пользователь является пользователем только с правами чтения данных (в подмножестве таблиц).

Что мне нужно сделать, это выполнить несколько удаленных запросов для получения необходимых данных.Вот что я написал (и это работает):

CREATE PROCEDURE QueryRemoteServer 
      (@SERVER nvarchar(50),@FieldNames nvarchar(500), @DB nvarchar(50),
       @Tablename nvarchar(100), @Login Nvarchar(50),@pwd Nvarchar(50))
AS
BEGIN
  /* Creation of Linked Server including the If exists check */
  if exists (Select name From sys.servers Where [Name]=@SERVER) 
  exec sp_dropserver @SERVER, 'droplogins' 
  exec sp_addlinkedserver @SERVER
  /* Creation of the login according to values returned from webserver */
  exec sp_addlinkedsrvlogin @SERVER, 'FALSE', NULL, @Login, @pwd
  /* exec the query (for simplicity I omitted the JOIN job) */
  exec ('SELECT ' +  @FieldNames + 
          ' FROM ['+ @Server + '].' + @Db + '.dbo.' + @Tablename)
  /* drop the created linked server */ 
  exec sp_dropserver @SERVER, 'droplogins' 
END

Клиент просто запустит что-то вроде этого:

exec QueryRemoteServer '127.0.0.1 , 4455','Field1, Field2',
           'MyRemoteDB','MyRemoteTable','GuestUser','GuestPassword'

Не могли бы вы рассказать мне свое мнение об этом подходе и сказатьмне, какие основные недостатки / преимущества вы видите?

1 Ответ

2 голосов
/ 07 сентября 2010

Рассматривали ли вы использование OPENROWSET вместо создания / удаления связанного сервера каждый раз?

...