Опубликован: 29.07.2008 | Доступ: свободный | Студентов: 1265 / 144 | Оценка: 4.49 / 4.15 | Длительность: 17:53:00
Лекция 4:

Работа с данными из удаленных источников

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >
Удаляем сконфигурированный связанный сервер

Если нужно удалить существующий связанный сервер в SQL Server Management Studio, выполните следующие действия:

  1. Запустите SQL Server Management Studio и установите соединение с сервером, который нужно настроить.
  2. Откройте Object Explorer (Обозреватель объектов) через меню View (Вид), как показано ниже, или нажав клавишу F8.
  3. В дереве объектов разверните экземпляр сервера SQL Server, который нужно сконфигурировать, откройте папку Server Object (Объекты сервера), а затем папку Linked Servers (Связанные серверы).
  4. Нажмите правой кнопкой мыши на узле связанного сервера, который вы хотели бы удалить, и выберите из контекстного меню команду Delete (Удалить); можно также выбрать узел и нажать клавишу ( DELETE ) на клавиатуре. Откроется окно Delete Object (Удаление объекта). Нажмите клавишу ОК, чтобы удалить связанный сервер.
Краткое сравнение связанных серверов и нерегламентированных запросов
  • Связанные серверы обеспечивают более гранулярный контроль над параметрами конфигурации соединения.
  • Управление связанными серверами осуществляется статически, независимо от кода T-SQL языка манипуляции данными (DML), который их использует.
  • Связанными серверами можно управлять при помощи кода или через интерфейс SQL Server Management Studio.
  • Связанные серверы проще в управлении, чем нерегламентированные запросы. Если вы хотите, чтобы существующий связанный сервер указывал на новый удаленный источник данных, нужно просто изменить конфигурацию связанного сервера. Код изменять не нужно.

Чтение данных с помощью связанного сервера

Существует три способа использования связанного сервера в коде T-SQL:

  • Имя связанного сервера используется в качестве компонента ServerName (ИмяСевера) в полном уточненном (четырехкомпонент-ном) имени для идентификации объекта, который нужно извлечь из удаленного источника данных. Таким образом, это имя можно использовать в любом месте кода T-SQL как ссылку на удаленный источник данных.
  • Используйте предложение EXECUTE… AT для отправки запроса удаленному источнику данных. Предложение EXECUTE обычно используется для выполнения инструкций DDL (языка определения данных) на удаленном источнике данных или для вызова удаленных хранимых процедур.
  • Используйте функцию OPENQUERY для отправки запроса удаленному источнику данных и извлечения набора строк. OPENQUERY можно использовать в коде T-SQL везде, где ожидается табличный результат.
Указываем связанный сервер в полном уточненном имени

Идентификатор связанного сервера становится компонентом Server Name (ИмяСервера) в четырехкомпонентном имени удаленного источника данных, как показано ниже. Код в этом разделе можно найти в файлах примеров в папке SqlScripts под именем LinkedServerFullyQualified Name.sql.

EXEC sp addlinkedserver @server = "SalesServer",
@srvproduct='SQL Server' GO
SELECT CustomerID, Date, Amount FROM SalesServer.SalesDB.Sales.Orders WHERE Quarter = @Quarter

Такой же синтаксис можно использовать для доступа к файлу Excel, сконфигурированному как связанный сервер с названием MyEmployees. В этом примере Employee$ - это имя запрашиваемой страницы Excel.

EXEC sp addlinkedserver
@server = "MyEmployees",
@srvproduct = "Jet 4.0",
@provider = "Microsoft.Jet.OLEDB.4.0",
@datasrc = "C:\Documents and Settings\User\My Documents\ 
                    Microsoft Press\Sql2005SBS_AppliedTechniques\ 
                    Chapter08\EmployeeList.xls',
@provstr = "Excel 8.0" GO SELECT * FROM MyEmployees...Employees$
Указываем связанный сервер в предложении EXECUTE...AT

Предложение EXECUTE… AT имеет следующий синтаксис:

EXECUTE ("query") AT LinkedServerIdentifier

Обратите внимание на то, что любой запрос, вписанный между апострофами ("), будет перенаправлен удаленному источнику данных для выполнения. Удаленный источник данных, если нужно, может возвратить набор строк OLE DB.

Конструкция EXECUTE… AT обычно используется для инструкций языка DDL, таких, как CREATE TABLE, CREATE PROCEDURE или / DROP VIEW, для предложений INSERT, UPDATE или DELETE или для выполнения удаленных хранимых процедур, как показано ниже. (Этот код можно найти в файлах примеров в папке SqlScripts под именем LinkedServerExecuteAt.sql.)

EXEC sp_addlinkedserver @server = "SalesServer",
@srvproduct='SQL Server' GO
EXECUTE ("CalculateCommissions") AT SalesServer

В этом коде хранимая процедура CalculateCommissions существует в базе данных Sales на удаленном источнике данных. Удаленный сервер SQL Server был сконфигурирован как связанный сервер с именем SalesServer.

Использование функции OPENQUERY для выполнения транзитных запросов

Использование функции OPENQUERY аналогично использованию функций OPENROWSET и OPENDATASOURCE. Эта функция может использоваться в любом коде T-SQL, в котором ожидается возвращение имени таблицы.

Однако в отличие от функций OPENROWSET и OPENDATASOURCE, функция OPENQUERY использует имя связанного сервера в качестве входного параметра, поэтому не нужно указывать конфигурацию соединения при каждом удаленном вызове.

Синтаксис функции OPENQUERY:

SELECT columns
FROM OPENQUERY(LinkedServerIdentifier, "query")

В следующем примере связанный сервер SalesServer представляет собой ссылку на сервер SQL Server с именем Sales, к нему выполняется доступ через функцию OPENQUERY для извлечения информации обо всех значениях из столбца Orders.. Внутреннее соединение в ключах CustomerID объявляется между удаленной таблицей Orders и локальной таблицей OrderDetails. Этот пример находится в папке SqlScriptExamples под именем OPENQUERY.sql.

EXEC sp_addlinkedserver 
 @server='SalesServer', 
 @srvproduct='', 
 @provider='SQLNCLI', 
 @datasrc='SrvrName\SrvrInstance', 
 @catalog='Sales'
GO
SELECT Orders.CustomerID, OrderDetails.Date, OrderDetails.Amount FROM
OPENQUERY(SalesServer, "SELECT * FROM ORDERS") AS Orders
INNER JOIN OrderDetails
ON Orders.CustomerID = OrderDetails.CustomerID WHERE Orders.Quarter = @Quarter
< Лекция 3 || Лекция 4: 12345 || Лекция 5 >