Оптимизация работы серверов баз данных Microsoft SQL Server 2005

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

Разбить на страницы
Показывать лекцию целиком

В лекциях 6-7 курса "Разработка и защита баз данных в Microsoft SQL Server 2005" вы научились переносить локальные данные на удаленные серверы баз данных, использовать разные варианты репликации, которые предлагает SQL Server 2005 и применять службы интеграции SQL Server для взаимодействия с различными источниками данных.

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

В этой лекции мы сконцентрируемся на том, как читать данные с удаленных источников и как осуществлять запись на удаленные источники данных в режиме реального времени. Этими источниками данных могут быть либо другие экземпляры SQL Server, либо иные источники данных, например, файлы Microsoft Office Excel или Microsoft Exchange Server.

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

В приложении, которое соединяется с одним сервером базы данных, это обычно реализуется при помощи класса ADO.NET Connection. В этой лекции рассказывается, главным образом, об установлении соединения с удаленным источником данных из SQL Server при помощи кода T-SQL при недоступности ADO.NET.

Чтение данных с удаленных источников в среднем ярусе

Давайте ненадолго вернемся к применению ADO.NET. Чтобы читать данные на удаленных источниках из компонента среднего яруса, вам необходимо открыть объект Connection для каждого из различных источников данных, с которыми вы хотите связаться, и независимо запросить у каждого из них данные, которые нужно извлечь.

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

(рис 4.1) Модель архитектуры для чтения данных с удаленного источника в среднем ярусе

Чтение данных с удаленных источников в среднем ярусе с использованием ADO.NET

Приложение среднего яруса должно установить соединение с каждым из различных источников данных при помощи соответствующего поставщика доступа к данным. Например:

  • Чтобы подключиться к базе данных Oracle при помощи ADO.NET:
    "Connect to pacific sales
    Dim oracleConn As OracleConnection = New OracleConnection()
        oracleConn.ConnectionString = "Data Source=MyOracleDB;Integrated Security=yes" 
    Dim oracleDA As New OracleDataAdapter("SELECT * FROM PacificSales", oracleConn)
  • Чтобы подключиться к файлу Excel при помощи ADO.NET:
    "Connect to central sales
    Dim excelConn As New OleDbConnection()
        excelConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
        "Data Source=C:\CentralSales.xls;Extended Properties=""Excel 8.0""" 
    Dim excelDA As New OleDbDataAdapter("SELECT * FROM [Sales$]", excelConn)
  • Чтобы подключиться к базе данных SQL Server при помощи ADO.NET:
    "Connect to atlantic sales
    Dim sqlConn As New SqlConnection()
        sqlConn.ConnectionString =
        "Data Source=MySQLServer; Initial Catalog=MySQLDB; Integrated Security=SSPI" 
    Dim sqlDA As New SqlDataAdapter("SELECT * FROM AtlanticSales", sqlConn)

    Затем приложение среднего яруса должно использовать объект DataSet для хранения всех данных, поступивших от различных источников, как в следующем примере кода: (Код этого раздела можно найти среди файлов примеров под именем MiddleTier.vb.txt ).

    Dim salesData as New DataSet() 
    oracleDA.Fill(salesData) 
    excelDA.Fill(salesData) 
    sqlDA.Fill(salesData)

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

  • Открыть отдельное соединение для каждого удаленного источника данных.
  • Перенести данные в средний ярус и слить все результаты в общий результат.

    Среднему ярусу приходится иметь дело с фактом распределения данных по различным физическим местам хранения.

    Иногда слияние данных в среднем ярусе оказывается не такой простой операцией, как в этом примере, поскольку данные могут быть по разному представлены и отформатированы. Код, необходимый для манипуляций с разнородными источниками данных, в программировании в инфраструктуре .NET не всегда одинаков. Например, если нужно извлечь данные из текстового файла, вероятно, вы воспользовались бы классом в пространстве имен System.IO, но если данные нужно было бы извлечь из Active Directory, то, скорее, потребовался бы класс в пространстве имен System.DirectoryServices. Модели программирования для классов в этих пространствах имен весьма различны.

  • Чтение данных из удаленных источников в SQL Server

    Еще один возможный подход в среднем ярусе - это запрос представлений, созданных в SQL Server. Представление должно отвечать за коммуникации со всеми разными источниками данных, выполняя слияние результатов и предоставляя вызывающему приложению один результирующий набор.

    Как показано на рис. 4.2, если мы перенесем ответственность за слияние результатов на SQL Server, то сможем воспользоваться преимуществами следующих аспектов:

  • Не нужно объединять средний ярус с физической реализацией.
  • SQL Server может выдать один результирующий набор, независимо от физического распределения данных, поэтому коду среднего яруса гораздо проще осуществлять запись, при этом риск в отношении безопасности, обслуживания, параллельного управления и коммуникаций будет меньше.
  • Обрабатывая промежуточные результирующие наборы от каждого из различных источников данных в SQL Server, мы можем воспользоваться реляционным поисковым механизмом и конструкциями T-SQL для того, чтобы создать более простое, легкое и управляемое решение (см. рис. вверху следующей страницы).

    SQL Server 2005 предлагает два разных подхода к управлению соединениями с удаленными источниками данных:

  • Установление нерегламентируемых соединений с внешними источниками данных, или
  • Статичное управление информацией о конфигурации соединения посредством установки связанного сервера.

    Оба подхода требуют, чтобы удаленный источник данных поддерживал поставщики доступа к данным OLE DB. Это означает, что вы могли бы установить соединение с другими базами данных SQL Server, файловой системы Windows, Microsoft Exchange Server, Windows Active Directory Service, Microsoft Excel или любых других источников данных с поставщиком OLE DB.

    (рис 4.2) Архитектурная модель для чтения данных из удаленных источников в SQL Server
  • Читаем данные из удаленного источника данных с использованием нерегламентированных запросов

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

    Включение поддержки нерегламентированных запросов

    В SQL Server 2005 поддержка нерегламентированных запросов по умолчанию отключена в интересах безопасности. Выполните перечисленные ниже действия, чтобы применить хранимую процедуру sp_configure для настройки поддержки нерегламентированных запросов или следующую процедуру для выполнения той же задачи через средство SQL Server Surface Area Configuration (Настройка конфигурации контактной зоны SQL Server).

    Включаем поддержку нерегламентированных запросов с помощью T-SQL

  • В меню Start (Пуск) выберите All Programs,. Microsoft SQL Server 2005, SQL Server Management Studio (Все программы, Microsoft SQL Server 2005, Среда SQL Server Management Studio). Откройте окно нового запроса и введите следующий код (который можно найти среди файлов примеров под именем EnableAdHoc.sql в папке SqlScripts.
    sp_configure "show advanced options", 1; 
    GO
    RECONFIGURE; 
    GO
    sp_configure "Ad Hoc Distributed Queries", 1; 
    GO
    RECONFIGURE; 
    GO
  • Нажмите кнопку Execute (Выполнить).
  • Включаем поддержку нерегламентированных запросов при помощи средства Настройка конфигурации контактной зоны SQL Server

  • В меню Start (Пуск) выберите All Programs,. Microsoft SQL Server 2005, Configuration Tools, SQL Server Surface Area Configuration. (Все программы, Microsoft SQL Server 2005, Средства настройки, Настройка контактной зоны SQL Server).
  • В нижней части главного окна, показанного на следующем рисунке, щелкните ссылку Surface Area Configuration For Features (Настройка контактной зоны для функциональных возможностей).
  • В окне Surface Area Configuration For Feature (Настройка контактной зоны для функциональных возможностей) перейдите на расположенную слева вкладку View By Instance (Просмотр по экземплярам).
  • Выделите экземпляр SQL Server, который нужно сконфигурировать, и разверните дерево Database Engine.
  • Выберите пункт Ad Hoc Remote Queries (Нерегламентированные удаленные запросы) в левой части окна.
  • Установите флажок Enable OPENROWSET And OPENDATASOURCE Support (Включить поддержку функций OPENROWSET и OPENDATASOURCE ).
  • Использование функции OPENROWSET для установления соединения с любым источником данных

    Используйте функцию OPENROWSET для того, чтобы открыть любой реляционный или не реляционный источник данных. SQL Server всегда устанавливает соединения с удаленными источниками данных с помощью интерфейса OLE DB. Удаленный источник данных должен поддерживать OLE DB, иначе соединение не будет установлено.

    Функция OPENROWSET позволяет указать параметры конфигурации соединения, чтобы управлять соединением SQL Server с удаленным источником данных. Можно также воспользоваться определяемой поставщиком строкой запроса, в которой можно указать, какой ресурс следует запросить.

    Устанавливаем соединение с базой данных Microsoft Office Access при помощи функции OPENROWSET

  • Запустите SQL Server Management Studio и откройте окно New Query (Новый запрос).Примечание. По умолчанию файлы Northwind.mdb и Employees.xls устанавливаются вместе с другими файлами примеров в следующий каталог: C:\Documents and Settings\User\My Documents\Microsoft Press\Sql2005SBS_AppliedTechniques\Chapter08

    Если вы установили файлы примеров в другой каталог, необходимо внести в код соответствующие изменения.

  • Введите следующий сценарий в окне New Query (Новый запрос): (Измените путь к файлу, чтобы он соответствовал размещению файла Northwind.mdb на вашем компьютере. Этот пример находится в папке SqlScripts под именем OPENROWSET.sql ).
    SELECT OrderInfo.OrderID, OrderInfo.CustomerID, OrderInfo.EmployeeID 
       FROM OPENROWSET( "Microsoft.Jet.OLEDB.4.0",
                        "C:\Documents and Settings\User\My Documents\Microsoft Press
                                \Sql2005SBS_AppliedTechniques\Chapter08\Northwind.mdb'; 
                       "Admin";'',
                       "SELECT OrderID, CustomerID, EmployeeID FROM Orders") As OrderInfo
  • Выполните сценарий:
  • Результат, возвращенный OPENROWSET можно использовать в любой инструкции T-SQL, в которой ожидается табличный результат.

    Использование SQL Server для чтения данных из нескольких источников

    Следующие шаги описывают представление с функциями, аналогичными методу ADO.NET, о котором рассказывалось в начале этой лекции, для соединения с несколькими источниками данных из среднего яруса. Однако сейчас этот код будет использовать SQL Server для чтения данных из нескольких источников. Код для этого примера включен в файлы примеров в папку SqlScriptExamples под именем ReadDataFromMultiple Sources.sql. Необходимо изменить следующие шаги, чтобы они соответствовали источникам данных, которые действительно существуют в вашей сети (базе данных Access, SQL Server или Oracle).

  • Запустите SQL Server Management Studio и установите соединение с сервером SQL Server 2005 и базой данных, в которой будет создано представление.
  • Введите необходимый для определения представления код T-SQL.
    CREATE VIEW GlobalSalesData AS
  • Установите нерегламентированное соединение с базой данных Microsoft Access PreSalesDB, имейте в виду, что надо указать полный путь к файлу базы данных.
    SELECT PreSales.CustomerID, PreSales.Date, PreSales.Amount
       FROM OPENROWSET(
            "Microsoft.Jet.OLEDB.4.0",
            "D:\PreSalesDB.MDB";'Admin';'Pass@word1',
            "SELECT CustomerID, Date, Amount, Quarter FROM Opportunities
       ORDER BY Date DESC') As PreSales
    UNION

    Microsoft.Jet.OLEDB.4.0 - это поставщик доступа к данным, который используется для доступа к удаленному источнику данных. Замените в этом коде путь к файлу, имя файла, имя пользователя и пароль на значения, соответствующие вашей среде.

  • Установите нерегламентированное соединение с сервером Microsoft SQL Server 2005, на котором размещена база данных SalesDB.
    SELECT Orders.CustomerID, Orders.Date, Orders.Amount
       FROM OPENROWSET(
            "SQLOLEDB",
            "Server=Sales; Trusted_Connection=yes;",
            "SalesDB.Sales.Orders") As Orders
      UNION

    SQLOLEDB - это поставщик доступа к данным, который используется для доступа к удаленному источнику данных SQL Server. Установка параметра Trusted_Connection на yes означает, что код будет проверять подлинность пользователя, используя учетные данные Windows для удаленного сервера. Замените имена сервера и базы данных на соответствующие значения для вашей среды.

  • Установите нерегламентированное соединение со сторонним сервером базы данных (в данном примере используется поставщик OLE DB Oracle), на котором размещена база данных PostSalesDB.
    SELECT PostSales.CustomerID, PostSales.Date, PostSales.Amount
      FROM OPENROWSET(
         "msdaora",
         "Data Source=PostSalesDB;User Id=LowPrivilegeUser; Password=SomePwd;",
         "SELECT CustomerID, Quarter, Date, Amount from Support") As PostSales
  • Здесь msdaora - это поставщик доступа к данным, который используется для доступа к удаленному источнику данных. Замените поставщик доступа к данным, источник данных, имя пользователя и пароль на значения, соответствующие вашей среде.

    Результаты каждого запроса соединяются, чтобы обеспечить возвращение одного результирующего набора.

    Чтение объектов при помощи функции OPENROWSET

    Функция OPENROWSET принимает два различных набора параметров для определения конфигурации строки соединения:

  • Первая синтаксическая конструкция позволяет повторно использовать одну и ту же строку соединения, созданную любым приложением, которое использует для соединения с источником данных OLE DB. Определим строку соединения с синтаксисом, определяемым поставщиком OLE DB:
    OPENROWSET("provider name", "provider specific string", "object|query")
  • Вот второй синтаксической конструкции мы указываем по отдельности источник данных, идентификатор пользователя и пароль, которые следует использовать:
    OPENROWSET("provider name", "datasource"; "userid"; "password", "object|query")

    Последний параметр (показанный в предыдущем примере кода как object | query) показывает, что для возвращения ответа нужен именно удаленный источник данных. Можно указать, что нужно извлечь объект данных, например, таблицу или представление, или результат данного запроса, как показано ниже (выделено полужирным шрифтом). (Код из этого раздела можно найти в примерах в папке SqlScriptExamples в файле OPENROWSETSyntaxExamples ).

    SELECT PostSales.CustomerID, PostSales.Date, PostSales.Amount
       FROM OPENROWSET(
            "msdaora",
            "Data Source=PostSalesDB;User Id=LowPrivilegeUser; Password=SomePwd;",
            "SELECT CustomerID, Quarter, Date, Amount from Support") As PostSales

    Источник для извлечения данных можно указать, используя трехкомпонентное имя, как показано ниже полужирным шрифтом, в котором SalesDB идентифицирует каталог (или базу данных), Sales идентифицирует схему, а Orders идентифицирует таблицу (или представление), которые следует возвратить.

    SELECT Orders.CustomerID, Orders.Date, Orders.Amount
       FROM OPENROWSET(
            "SQLOLEDB",
            "Server=Sales; Trusted_Connection=yes;",
            "SalesDB.Sales.Orders") As Orders
       WHERE Orders.Quarter = @Quarter
    Важно. Полное уточненное имя используется, чтобы корректно идентифицировать извлекаемый ресурс или объект в источниках данных, которые упорядочивают свои данные в каталогах, схемах и объектах данных.

    Полное уточненное имя состоит из четырех идентификаторов:

    < ИмяСервера >.< ИмяКаталога>.< ИмяСхемы >.< ИмяРесурса >
  • Использование функции OPENDATASOURCE для установления соединения с любым источником данных

    Функция OPENDATASOURCE также позволяет устанавливать соединения с источниками данных, данные в которых упорядочены по каталогам, схемам и объектам. Главное отличие от функции OPENROWSET -это способ вызова функции OPENDATASOURCE. Обе функции возвращают результирующий набор OLE DB.

    Функция OPENDATASOURCE занимает место компонента <Имя-Сервера> в полном уточненном имени (четырехкомпонентном), чтобы идентифицировать объект, который нужно извлечь из удаленного источника данных, как показано ниже. Имейте в виду, что необходимо изменить эти примеры, чтобы они соответствовали вашим серверам и базам данных. Следующий код можно найти в файлах примеров под именем UseOPENDATASOURCE ToConnectToAnotherServer.sql в папке SqlScriptExamples.

    SELECT Orders.CustomerID, Orders.Date, Orders.Amount
       FROM OPENDATASOURCE(
            "SQLOLEDB",
            "Server=Sales; Trusted_Connection=yes;").SalesDB.dbo.Orders 
       WHERE Orders.Quarter = @Quarter

    В приведенном выше примере функция OPENDATASOURCE замещает имя сервера в полном уточненном имени таблицы Orders.

    Следующий код показывает, как можно извлечь данные из файла Excel. Этот пример находится в папке SqlScripts под именем UseOPENDATASOURCEtoExtractXL.sql ).

    SELECT Employees.FirstName,
           Employees.LastName,
           Employees.Title,
           Employees.Country 
       FROM OPENDATASOURCE(
           "Microsoft.Jet.OLEDB.4.0",
           "Excel 8.0;DATABASE=C:\Documents and Settings\User\My Documents\ 
                                       Microsoft Press\Sql2005SBS_AppliedTechniques\ 
                                       Chapter08\EmployeeList.xls')...[Employees$] AS Employees 
       WHERE LastName IS NOT NULL ORDER BY Employees.Country DESC
    Примечание. Даже при открытии файла Excel используется четырехкомпонентный синтаксис имени. В коде SQL предыдущего примера имена каталога и схемы опущены, тем не менее, разделитель (.) должен присутствовать. Именно по этой причине в запросе перед именем страницы Excel необходимы кавычки "..." (Employees$).

    Чтение данных из удаленного источника с использованием связанных серверов

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

    В следующем примере обе функции - и OPENROWSET, и OPENDATASOURCE - используются для извлечения результатов из одного удаленного источника данных. Этот пример находится в папке SqlScript Examples под именем OPENROWSETandOPENDATASOURCEUsedTogether.sql.

    SELECT Orders.CustomerID, Orders.Date, Orders.Amount
    FROM
    OPENROWSET( "SQLOLEDB", "Server=Sales; Trusted_Connection=yes;",
                 SalesDB.Sales.Orders) As Orders
    INNER JOIN
         OPENDATASOURCE("SQLOLEDB", "Server=Sales;
                       Trusted_Connection=yes;').SalesDB.Sales.OrderDetails
         ON Orders.OrderID = OrderDetails.OrderID
    WHERE Sales.Quarter = 3

    Функции OPENROWSET и OPENDATASOURCE требуют указания параметров конфигурации соединения при каждом соединении, даже если речь идет о соединении с одним сервером.

    Использование связанных серверов для установления соединения с любым источником данных

    Вместо того, чтобы повторно устанавливать одни и те же настройки соединения при каждом применении функций OPENROWSET или OPENDATASOURCE, SQL Server позволяет сохранить эти параметры и назначить им идентификатор, чтоб их можно было повторно использовать, не вводя параметры конфигурации каждый раз заново; эта технология получила название "связанный сервер". Связанный сервер является, по сути, виртуальным сервером.

    Связанные серверы имеют еще одно преимущество: их конфигурацию можно настраивать с помощью кода T-SQL или через интерфейс SQL Server Management Studio.

    Важно. Использование связанных серверов позволяет использовать функции, не доступные при использовании функций OPENROWSET или OPENDATASOURCE. Например, можно:
  • Управлять статической безопасностью
  • Сопоставлять имена входа в систему
  • Запрашивать информацию каталога
  • Настраивать различные параметры соединения, такие, как время ожидания соединения по умолчанию.
  • Настройка связанного сервера при помощи T-SQL

    Чтобы сконфигурировать связанный сервер с помощью кода T-SQL, необходимо использовать хранимую процедуру sp_addlinkedserver. Хранимая процедура sp_addlinkedserver для настройки конфигурации удаленных источников данных принимает несколько параметров.

    В следующем примере демонстрируется готовый код T-SQL, необходимый для добавления удаленного сервера SQL Server в качестве связанного сервера. Код в этом разделе можно найти в файлах примеров в папке SqlScripts под именем LinkedServer.sql.

    EXEC sp_addlinkedserver @server = "Sales",
    @srvproduct='SQL Server' GO
    Важно. Предыдущие версии SQL Server предоставляли хранимую процедуру sp_addserver, которая использовалась для добавления ссылки на удаленный сервер. Эта хранимая процедура доступна и в SQL Server 2005, но она предназначена только для обеспечения обратной совместимости. Поддержка хранимой процедуры sp_addserver будет исключена из следующих версий SQL Server. В дальнейшем следует использовать только хранимую процедуру sp_addlinkedserver.

    Код для создания связанного сервера для файла Microsoft Excel.

    - Связанный сервер для файла 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

    Следующий код создает связанный сервер для базы данных Access.

    - Связанный сервер для базы данных Access EXEC sp_addlinkedserver
    @server = "PreSales",
    @provider = "Microsoft.Jet.OLEDB.4.0",
    @srvproduct = "OLEDB Provider for Jet",
    @datasrc = "C:\Documents and Settings\User\My Documents\
                        Microsoft Press\Sql2005SBS_AppliedTechniques\
                        Chapter08\Northwind.mdb' GO

    Еще один код, показывающий, как создать связанный сервер для базы данных стороннего разработчика, например, Oracle.

    - Связанный сервер для базы данных Oracle 
    EXEC sp_addlinkedserver
    @server = "PostSales",
    @srvproduct = "Oracle",
    @provider = "msdaora",
    @datasrc = "PostSalesDB" GO

    Проверяем, какие связанные сервера определены в данный момент

  • Откройте SQL Server Management Studio и установите соединение с экземпляром SQL Server.
  • Запросите значения из системного представления sys.servers с фильтрацией по столбцу is_linked, как показано в следующем примере.
    SELECT * FROM sys.servers WHERE is_linked = 1
  • Изучите результаты, возвращенные системным представлением Важно. При регистрации связанных серверов SQL Server не выполняет проверки корректности указанных параметров или существования имени сервера. Хранимая процедура sp_addlinkedserver всегда выполняется успешно. В случае, если вы указали неправильное значение параметра, об этом можно узнать только в процессе выполнения.
  • Удаление сконфигурированных связанных серверов

    Если нужно удалить уже зарегистрированный связанный сервер, можно воспользоваться хранимой процедурой sp_dropserver, как показано в следующем примере кода.

    EXEC sp_dropserver "MyEmployees" GO

    Хранимая процедура sp_dropserver получает один параметр, идентификатор связанного сервера, который нужно удалить.

    Настраиваем конфигурацию связанного сервера через интерфейс SQL Server Management Studio

    Конфигурацию связанных серверов можно настраивать и через SQL Server Management Studio.

  • Запустите SQL Server Management Studio и установите соединение с сервером, который нужно настроить.
  • Откройте Object Explorer (Обозреватель объектов) через меню View (Вид), как показано ниже, или нажав клавишу F8. Обозреватель объектов позволяет без лишних сложностей найти все сервисы и их компоненты определенного экземпляра сервера SQL Server и управлять ими.
  • В дереве объектов разверните экземпляр сервера SQL Server, который нужно сконфигурировать, откройте папку
  • Щелкните правой кнопкой на папке Linked Servers (Связанные серверы) и выберите из контекстного меню команду New Linked Server (Создать связанный сервер), чтобы запустить мастер для настройки конфигурации связанного сервера.
  • В окне New Link Server (Создание нового связанного сервера), показанном ниже, сконфигурируйте все параметры доступ к удаленному источнику данных (см. рис. вверху следующей страницы).
  • Перейдите на страницу Security (Безопасность) в панели Select A Page (Выбор страницы) в левой части окна. В результате вы окажетесь в окне, показанном на следующем рисунке. Если удаленный источник данных требует проверки подлинности, необходимо сопоставить локальную учетную запись на локальном сервере локальной учетной записи на удаленном сервере. Если аутентифицируемое имя входа является учетной записью Windows, то при вызове удаленного источника данных SQL Server выполняет роль аутентифицированного пользователя. В противном случае, если аутентифицируемое имя входа в SQL Server является именем входа SQL Server, то при вызове удаленного источника данных SQL Server выполняет удаленный вызов с использованием учетной записи службы SQL Server.
  • Перейдите на страницу Server Options (Параметры сервера) в панели Select A Page (Выбор страницы) в левой части окна. В результате вы окажетесь в окне, показанном на следующем рисунке. Параметры сервера позволяют настроить все детали соединения с удаленным источником данных. Подробное объяснение значения каждого из этих параметров можно найти в теме "Свойства связанного сервера (Страница Параметры сервера)" в Электронной документации SQL Server 2005/
  • После настройки параметров конфигурации связанного сервера нажмите кнопку ОК. Обратите внимание на то, в дереве объектов в панели Server Explorer (Обозреватель серверов) появился новый значок, как показано ниже.

    При добавлении нового связанного сервера с помощью T-SQL или через SQL Server Management Studio будут возвращены совершенно одинаковые результаты.

  • Удаляем сконфигурированный связанный сервер

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

  • Запустите SQL Server Management Studio и установите соединение с сервером, который нужно настроить.
  • Откройте Object Explorer (Обозреватель объектов) через меню View (Вид), как показано ниже, или нажав клавишу F8.
  • В дереве объектов разверните экземпляр сервера SQL Server, который нужно сконфигурировать, откройте папку Server Object (Объекты сервера), а затем папку Linked Servers (Связанные серверы).
  • Нажмите правой кнопкой мыши на узле связанного сервера, который вы хотели бы удалить, и выберите из контекстного меню команду 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

    Вставка, обновление или удаление данных на удаленном источнике данных в SQL Server

    Методы, которые использовались для чтения данных из удаленных источников из SQL Server, можно также применить для выполнения предложений INSERT, UPDATE и DELETE на удаленных источниках данных.

    Используем нерегламентированные соединения для вставки, обновления и удаления данных

    Функции OPENROWSET и OPENDATASOURCE могут использоваться в предложениях INSERT, UPDATE и DELETE для манипуляций с данными на удаленном источнике данных.

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

    Следующий код показывает, как добавить новую запись в файл Excel. (Код в этом разделе можно найти в файлах примеров в папке SqlScripts под именем UsingAdHocToUpdate.sql )/

    INSERT OPENROWSET(
    "Microsoft.Jet.OLEDB.4.0",
    "Excel 8.0;DATABASE=C:\Documents and Settings\User\My Documents\
    Microsoft Press\Sql2005SBS_AppliedTechniques\
    Chapter08\EmployeeList.xls', "SELECT FirstName, LastName, Title, Region FROM [Employees$]") VALUES ("John",
    "Doe",
    "Consultant",
    "CA")

    Код, который приводится ниже, показывает, как вставить новую запись в удаленную базу данных SQL Server.

    - Вставка в удаленную базу данных SQl Server INSERT OPENROWSET(
    "SQLOLEDB",
    "Server=Sales; Trusted_Connection=yes;",
    "SalesDB.Sales.Orders") VALUES (175642, "2001-10-04", 6500.05) GO

    Функция OPENDATASOURCE может использоваться для вставки ( INSERT ), обновления ( UPDATE ) или удаления ( DELETE ) данных в удаленной таблице с полным уточненным именем. В этом случае запрос определять не нужно. Следующий код демонстрирует этот метод на примере файла Microsoft Office Excel.

    INSERT OPENDATASOURCE( "Microsoft.Jet.OLEDB.4.0", "Excel 8.0;DATABASE=C:\Documents and Settings\User\My Documents\
    Microsoft Press\Sql2005SBS_AppliedTechniques\Chapter08\
    EmployeeList.xls')...[Employees$] VALUES ("99",
    "Doe",
    "John",
    "Tester",
    "Mr.",
    '12/06/1964',
    "5/1/1995",
    "507 20th Ave. S.",
    "Seattle",
    "WA",
    "98122",
    "USA",
    "(206) 555-9857",
    "5467",
    "testing",
    "2")

    Используем для вставки, обновления и удаления данных связанные серверы

    После того, как вы создали связанный сервер при помощи хранимой процедуры sp_addlinkedserver, можно использовать эту ссылку для выполнения предложений INSERT, UPDATE и DELETE в удаленной таблице с полным уточненным именем.

    Следующий код демонстрирует этот метод на примере удаленной базы данных SQL Server. (Код из этого раздела можно найти в файлах примеров в папке SqlScripts под именем UsingLinkedServerToUpdate.sql ).

    EXEC sp_addlinkedserver @server = "SalesServer",
    @srvproduct=N'SQL Server' GO
    DELETE SalesServer.SalesDB.Sales.Orders WHERE Quarter = 3

    Для того, чтобы использовать функцию OPENQUERY, вместо определения выполняемого запроса нужно указать имя таблицы, в которой нужно выполнить операции INSERT, UPDATE или DELETE.

    Следующий код показывает этот метод на примере файла 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
    UPDATE OPENQUERY(MyEmployees, "SELECT * FROM [Employees$]") SET LastName = "Newname" WHERE Region = "CA"

    Заключение

    В этой лекции речь шла, главным образом, о том, как читать и записывать данные на удаленном источнике. Удаленные источники данных могут представлять собой другие экземпляры сервера SQL Server или источники данных других типов. Все действия, которые были описаны выше, можно выполнять через инструкции T-SQL. SQL Server Management Studio предоставляет интерфейс пользователя для управления удаленными источниками данных.

    Краткий справочник по 4 лекции

    Чтобы Выполните следующие действия
    Иногда выполнять запросы к удаленному источнику посредством отправки транзитного запроса Используйте функцию OPENROWSET.
    Иногда выполнять запросы к удаленным ресурсам посредством ссылки на объект с использованием четырехкомпонентного имени Используйте функцию OPENDATASOURCE.
    Создать новый связанный сервер через интерфейс Microsoft SQL Server Management Studio В окне Обозревателя объектов SQLServer Management Studio разверните экземпляр SQL Server, откройте папку Server Objects (Объекты сервера), а затем папку Linked Servers (Связанные серверы).
    Создать новый связанный сервер путем программирования Используйте системную хранимую процедуру sp_addlinkedserver.
    Удалить связанный сервер посредством программирования Используйте системную хранимую процедуру sp_dropserver.
    Часто выполнять запросы к удаленному ресурсу посредством отправки транзитного запроса Определите связанный сервер и используйте функцию OPENQUERY.
    Часто выполнять запросы к удаленным ресурсам посредством ссылки на объект с использованием четырехкомпонентного имени Определите связанный сервер и используйте идентификатор связанного сервера в качестве компонента <ИмяСервера> полного уточненного имени.
    Часто выполнять инструкции DDL и хранимые процедуры в отношении удаленного ресурса Определите связанный сервер и используйте конструкцию EXECUTE…AT.
    Страницы:

    В лекциях 6-7 курса "Разработка и защита баз данных в Microsoft SQL Server 2005" вы научились переносить локальные данные на удаленные серверы баз данных, использовать разные варианты репликации, которые предлагает SQL Server 2005 и применять службы интеграции SQL Server для взаимодействия с различными источниками данных.

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

    В этой лекции мы сконцентрируемся на том, как читать данные с удаленных источников и как осуществлять запись на удаленные источники данных в режиме реального времени. Этими источниками данных могут быть либо другие экземпляры SQL Server, либо иные источники данных, например, файлы Microsoft Office Excel или Microsoft Exchange Server.

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

    В приложении, которое соединяется с одним сервером базы данных, это обычно реализуется при помощи класса ADO.NET Connection. В этой лекции рассказывается, главным образом, об установлении соединения с удаленным источником данных из SQL Server при помощи кода T-SQL при недоступности ADO.NET.

    Чтение данных с удаленных источников в среднем ярусе

    Давайте ненадолго вернемся к применению ADO.NET. Чтобы читать данные на удаленных источниках из компонента среднего яруса, вам необходимо открыть объект Connection для каждого из различных источников данных, с которыми вы хотите связаться, и независимо запросить у каждого из них данные, которые нужно извлечь.

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

    (рис 4.1) Модель архитектуры для чтения данных с удаленного источника в среднем ярусе

    Чтение данных с удаленных источников в среднем ярусе с использованием ADO.NET

    Приложение среднего яруса должно установить соединение с каждым из различных источников данных при помощи соответствующего поставщика доступа к данным. Например:

  • Чтобы подключиться к базе данных Oracle при помощи ADO.NET:
    "Connect to pacific sales
    Dim oracleConn As OracleConnection = New OracleConnection()
        oracleConn.ConnectionString = "Data Source=MyOracleDB;Integrated Security=yes" 
    Dim oracleDA As New OracleDataAdapter("SELECT * FROM PacificSales", oracleConn)
  • Чтобы подключиться к файлу Excel при помощи ADO.NET:
    "Connect to central sales
    Dim excelConn As New OleDbConnection()
        excelConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
        "Data Source=C:\CentralSales.xls;Extended Properties=""Excel 8.0""" 
    Dim excelDA As New OleDbDataAdapter("SELECT * FROM [Sales$]", excelConn)
  • Чтобы подключиться к базе данных SQL Server при помощи ADO.NET:
    "Connect to atlantic sales
    Dim sqlConn As New SqlConnection()
        sqlConn.ConnectionString =
        "Data Source=MySQLServer; Initial Catalog=MySQLDB; Integrated Security=SSPI" 
    Dim sqlDA As New SqlDataAdapter("SELECT * FROM AtlanticSales", sqlConn)

    Затем приложение среднего яруса должно использовать объект DataSet для хранения всех данных, поступивших от различных источников, как в следующем примере кода: (Код этого раздела можно найти среди файлов примеров под именем MiddleTier.vb.txt ).

    Dim salesData as New DataSet() 
    oracleDA.Fill(salesData) 
    excelDA.Fill(salesData) 
    sqlDA.Fill(salesData)

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

  • Открыть отдельное соединение для каждого удаленного источника данных.
  • Перенести данные в средний ярус и слить все результаты в общий результат.

    Среднему ярусу приходится иметь дело с фактом распределения данных по различным физическим местам хранения.

    Иногда слияние данных в среднем ярусе оказывается не такой простой операцией, как в этом примере, поскольку данные могут быть по разному представлены и отформатированы. Код, необходимый для манипуляций с разнородными источниками данных, в программировании в инфраструктуре .NET не всегда одинаков. Например, если нужно извлечь данные из текстового файла, вероятно, вы воспользовались бы классом в пространстве имен System.IO, но если данные нужно было бы извлечь из Active Directory, то, скорее, потребовался бы класс в пространстве имен System.DirectoryServices. Модели программирования для классов в этих пространствах имен весьма различны.

  • Чтение данных из удаленных источников в SQL Server

    Еще один возможный подход в среднем ярусе - это запрос представлений, созданных в SQL Server. Представление должно отвечать за коммуникации со всеми разными источниками данных, выполняя слияние результатов и предоставляя вызывающему приложению один результирующий набор.

    Как показано на рис. 4.2, если мы перенесем ответственность за слияние результатов на SQL Server, то сможем воспользоваться преимуществами следующих аспектов:

  • Не нужно объединять средний ярус с физической реализацией.
  • SQL Server может выдать один результирующий набор, независимо от физического распределения данных, поэтому коду среднего яруса гораздо проще осуществлять запись, при этом риск в отношении безопасности, обслуживания, параллельного управления и коммуникаций будет меньше.
  • Обрабатывая промежуточные результирующие наборы от каждого из различных источников данных в SQL Server, мы можем воспользоваться реляционным поисковым механизмом и конструкциями T-SQL для того, чтобы создать более простое, легкое и управляемое решение (см. рис. вверху следующей страницы).

    SQL Server 2005 предлагает два разных подхода к управлению соединениями с удаленными источниками данных:

  • Установление нерегламентируемых соединений с внешними источниками данных, или
  • Статичное управление информацией о конфигурации соединения посредством установки связанного сервера.

    Оба подхода требуют, чтобы удаленный источник данных поддерживал поставщики доступа к данным OLE DB. Это означает, что вы могли бы установить соединение с другими базами данных SQL Server, файловой системы Windows, Microsoft Exchange Server, Windows Active Directory Service, Microsoft Excel или любых других источников данных с поставщиком OLE DB.

    (рис 4.2) Архитектурная модель для чтения данных из удаленных источников в SQL Server
  • Читаем данные из удаленного источника данных с использованием нерегламентированных запросов

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

    Включение поддержки нерегламентированных запросов

    В SQL Server 2005 поддержка нерегламентированных запросов по умолчанию отключена в интересах безопасности. Выполните перечисленные ниже действия, чтобы применить хранимую процедуру sp_configure для настройки поддержки нерегламентированных запросов или следующую процедуру для выполнения той же задачи через средство SQL Server Surface Area Configuration (Настройка конфигурации контактной зоны SQL Server).

    Включаем поддержку нерегламентированных запросов с помощью T-SQL

  • В меню Start (Пуск) выберите All Programs,. Microsoft SQL Server 2005, SQL Server Management Studio (Все программы, Microsoft SQL Server 2005, Среда SQL Server Management Studio). Откройте окно нового запроса и введите следующий код (который можно найти среди файлов примеров под именем EnableAdHoc.sql в папке SqlScripts.
    sp_configure "show advanced options", 1; 
    GO
    RECONFIGURE; 
    GO
    sp_configure "Ad Hoc Distributed Queries", 1; 
    GO
    RECONFIGURE; 
    GO
  • Нажмите кнопку Execute (Выполнить).
  • Включаем поддержку нерегламентированных запросов при помощи средства Настройка конфигурации контактной зоны SQL Server

  • В меню Start (Пуск) выберите All Programs,. Microsoft SQL Server 2005, Configuration Tools, SQL Server Surface Area Configuration. (Все программы, Microsoft SQL Server 2005, Средства настройки, Настройка контактной зоны SQL Server).
  • В нижней части главного окна, показанного на следующем рисунке, щелкните ссылку Surface Area Configuration For Features (Настройка контактной зоны для функциональных возможностей).
  • В окне Surface Area Configuration For Feature (Настройка контактной зоны для функциональных возможностей) перейдите на расположенную слева вкладку View By Instance (Просмотр по экземплярам).
  • Выделите экземпляр SQL Server, который нужно сконфигурировать, и разверните дерево Database Engine.
  • Выберите пункт Ad Hoc Remote Queries (Нерегламентированные удаленные запросы) в левой части окна.
  • Установите флажок Enable OPENROWSET And OPENDATASOURCE Support (Включить поддержку функций OPENROWSET и OPENDATASOURCE ).
  • Использование функции OPENROWSET для установления соединения с любым источником данных

    Используйте функцию OPENROWSET для того, чтобы открыть любой реляционный или не реляционный источник данных. SQL Server всегда устанавливает соединения с удаленными источниками данных с помощью интерфейса OLE DB. Удаленный источник данных должен поддерживать OLE DB, иначе соединение не будет установлено.

    Функция OPENROWSET позволяет указать параметры конфигурации соединения, чтобы управлять соединением SQL Server с удаленным источником данных. Можно также воспользоваться определяемой поставщиком строкой запроса, в которой можно указать, какой ресурс следует запросить.

    Устанавливаем соединение с базой данных Microsoft Office Access при помощи функции OPENROWSET

  • Запустите SQL Server Management Studio и откройте окно New Query (Новый запрос).Примечание. По умолчанию файлы Northwind.mdb и Employees.xls устанавливаются вместе с другими файлами примеров в следующий каталог: C:\Documents and Settings\User\My Documents\Microsoft Press\Sql2005SBS_AppliedTechniques\Chapter08

    Если вы установили файлы примеров в другой каталог, необходимо внести в код соответствующие изменения.

  • Введите следующий сценарий в окне New Query (Новый запрос): (Измените путь к файлу, чтобы он соответствовал размещению файла Northwind.mdb на вашем компьютере. Этот пример находится в папке SqlScripts под именем OPENROWSET.sql ).
    SELECT OrderInfo.OrderID, OrderInfo.CustomerID, OrderInfo.EmployeeID 
       FROM OPENROWSET( "Microsoft.Jet.OLEDB.4.0",
                        "C:\Documents and Settings\User\My Documents\Microsoft Press
                                \Sql2005SBS_AppliedTechniques\Chapter08\Northwind.mdb'; 
                       "Admin";'',
                       "SELECT OrderID, CustomerID, EmployeeID FROM Orders") As OrderInfo
  • Выполните сценарий:
  • Результат, возвращенный OPENROWSET можно использовать в любой инструкции T-SQL, в которой ожидается табличный результат.

    Использование SQL Server для чтения данных из нескольких источников

    Следующие шаги описывают представление с функциями, аналогичными методу ADO.NET, о котором рассказывалось в начале этой лекции, для соединения с несколькими источниками данных из среднего яруса. Однако сейчас этот код будет использовать SQL Server для чтения данных из нескольких источников. Код для этого примера включен в файлы примеров в папку SqlScriptExamples под именем ReadDataFromMultiple Sources.sql. Необходимо изменить следующие шаги, чтобы они соответствовали источникам данных, которые действительно существуют в вашей сети (базе данных Access, SQL Server или Oracle).

  • Запустите SQL Server Management Studio и установите соединение с сервером SQL Server 2005 и базой данных, в которой будет создано представление.
  • Введите необходимый для определения представления код T-SQL.
    CREATE VIEW GlobalSalesData AS
  • Установите нерегламентированное соединение с базой данных Microsoft Access PreSalesDB, имейте в виду, что надо указать полный путь к файлу базы данных.
    SELECT PreSales.CustomerID, PreSales.Date, PreSales.Amount
       FROM OPENROWSET(
            "Microsoft.Jet.OLEDB.4.0",
            "D:\PreSalesDB.MDB";'Admin';'Pass@word1',
            "SELECT CustomerID, Date, Amount, Quarter FROM Opportunities
       ORDER BY Date DESC') As PreSales
    UNION

    Microsoft.Jet.OLEDB.4.0 - это поставщик доступа к данным, который используется для доступа к удаленному источнику данных. Замените в этом коде путь к файлу, имя файла, имя пользователя и пароль на значения, соответствующие вашей среде.

  • Установите нерегламентированное соединение с сервером Microsoft SQL Server 2005, на котором размещена база данных SalesDB.
    SELECT Orders.CustomerID, Orders.Date, Orders.Amount
       FROM OPENROWSET(
            "SQLOLEDB",
            "Server=Sales; Trusted_Connection=yes;",
            "SalesDB.Sales.Orders") As Orders
      UNION

    SQLOLEDB - это поставщик доступа к данным, который используется для доступа к удаленному источнику данных SQL Server. Установка параметра Trusted_Connection на yes означает, что код будет проверять подлинность пользователя, используя учетные данные Windows для удаленного сервера. Замените имена сервера и базы данных на соответствующие значения для вашей среды.

  • Установите нерегламентированное соединение со сторонним сервером базы данных (в данном примере используется поставщик OLE DB Oracle), на котором размещена база данных PostSalesDB.
    SELECT PostSales.CustomerID, PostSales.Date, PostSales.Amount
      FROM OPENROWSET(
         "msdaora",
         "Data Source=PostSalesDB;User Id=LowPrivilegeUser; Password=SomePwd;",
         "SELECT CustomerID, Quarter, Date, Amount from Support") As PostSales
  • Здесь msdaora - это поставщик доступа к данным, который используется для доступа к удаленному источнику данных. Замените поставщик доступа к данным, источник данных, имя пользователя и пароль на значения, соответствующие вашей среде.

    Результаты каждого запроса соединяются, чтобы обеспечить возвращение одного результирующего набора.

    Чтение объектов при помощи функции OPENROWSET

    Функция OPENROWSET принимает два различных набора параметров для определения конфигурации строки соединения:

  • Первая синтаксическая конструкция позволяет повторно использовать одну и ту же строку соединения, созданную любым приложением, которое использует для соединения с источником данных OLE DB. Определим строку соединения с синтаксисом, определяемым поставщиком OLE DB:
    OPENROWSET("provider name", "provider specific string", "object|query")
  • Вот второй синтаксической конструкции мы указываем по отдельности источник данных, идентификатор пользователя и пароль, которые следует использовать:
    OPENROWSET("provider name", "datasource"; "userid"; "password", "object|query")

    Последний параметр (показанный в предыдущем примере кода как object | query) показывает, что для возвращения ответа нужен именно удаленный источник данных. Можно указать, что нужно извлечь объект данных, например, таблицу или представление, или результат данного запроса, как показано ниже (выделено полужирным шрифтом). (Код из этого раздела можно найти в примерах в папке SqlScriptExamples в файле OPENROWSETSyntaxExamples ).

    SELECT PostSales.CustomerID, PostSales.Date, PostSales.Amount
       FROM OPENROWSET(
            "msdaora",
            "Data Source=PostSalesDB;User Id=LowPrivilegeUser; Password=SomePwd;",
            "SELECT CustomerID, Quarter, Date, Amount from Support") As PostSales

    Источник для извлечения данных можно указать, используя трехкомпонентное имя, как показано ниже полужирным шрифтом, в котором SalesDB идентифицирует каталог (или базу данных), Sales идентифицирует схему, а Orders идентифицирует таблицу (или представление), которые следует возвратить.

    SELECT Orders.CustomerID, Orders.Date, Orders.Amount
       FROM OPENROWSET(
            "SQLOLEDB",
            "Server=Sales; Trusted_Connection=yes;",
            "SalesDB.Sales.Orders") As Orders
       WHERE Orders.Quarter = @Quarter
    Важно. Полное уточненное имя используется, чтобы корректно идентифицировать извлекаемый ресурс или объект в источниках данных, которые упорядочивают свои данные в каталогах, схемах и объектах данных.

    Полное уточненное имя состоит из четырех идентификаторов:

    < ИмяСервера >.< ИмяКаталога>.< ИмяСхемы >.< ИмяРесурса >
  • Использование функции OPENDATASOURCE для установления соединения с любым источником данных

    Функция OPENDATASOURCE также позволяет устанавливать соединения с источниками данных, данные в которых упорядочены по каталогам, схемам и объектам. Главное отличие от функции OPENROWSET -это способ вызова функции OPENDATASOURCE. Обе функции возвращают результирующий набор OLE DB.

    Функция OPENDATASOURCE занимает место компонента <Имя-Сервера> в полном уточненном имени (четырехкомпонентном), чтобы идентифицировать объект, который нужно извлечь из удаленного источника данных, как показано ниже. Имейте в виду, что необходимо изменить эти примеры, чтобы они соответствовали вашим серверам и базам данных. Следующий код можно найти в файлах примеров под именем UseOPENDATASOURCE ToConnectToAnotherServer.sql в папке SqlScriptExamples.

    SELECT Orders.CustomerID, Orders.Date, Orders.Amount
       FROM OPENDATASOURCE(
            "SQLOLEDB",
            "Server=Sales; Trusted_Connection=yes;").SalesDB.dbo.Orders 
       WHERE Orders.Quarter = @Quarter

    В приведенном выше примере функция OPENDATASOURCE замещает имя сервера в полном уточненном имени таблицы Orders.

    Следующий код показывает, как можно извлечь данные из файла Excel. Этот пример находится в папке SqlScripts под именем UseOPENDATASOURCEtoExtractXL.sql ).

    SELECT Employees.FirstName,
           Employees.LastName,
           Employees.Title,
           Employees.Country 
       FROM OPENDATASOURCE(
           "Microsoft.Jet.OLEDB.4.0",
           "Excel 8.0;DATABASE=C:\Documents and Settings\User\My Documents\ 
                                       Microsoft Press\Sql2005SBS_AppliedTechniques\ 
                                       Chapter08\EmployeeList.xls')...[Employees$] AS Employees 
       WHERE LastName IS NOT NULL ORDER BY Employees.Country DESC
    Примечание. Даже при открытии файла Excel используется четырехкомпонентный синтаксис имени. В коде SQL предыдущего примера имена каталога и схемы опущены, тем не менее, разделитель (.) должен присутствовать. Именно по этой причине в запросе перед именем страницы Excel необходимы кавычки "..." (Employees$).

    Чтение данных из удаленного источника с использованием связанных серверов

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

    В следующем примере обе функции - и OPENROWSET, и OPENDATASOURCE - используются для извлечения результатов из одного удаленного источника данных. Этот пример находится в папке SqlScript Examples под именем OPENROWSETandOPENDATASOURCEUsedTogether.sql.

    SELECT Orders.CustomerID, Orders.Date, Orders.Amount
    FROM
    OPENROWSET( "SQLOLEDB", "Server=Sales; Trusted_Connection=yes;",
                 SalesDB.Sales.Orders) As Orders
    INNER JOIN
         OPENDATASOURCE("SQLOLEDB", "Server=Sales;
                       Trusted_Connection=yes;').SalesDB.Sales.OrderDetails
         ON Orders.OrderID = OrderDetails.OrderID
    WHERE Sales.Quarter = 3

    Функции OPENROWSET и OPENDATASOURCE требуют указания параметров конфигурации соединения при каждом соединении, даже если речь идет о соединении с одним сервером.

    Использование связанных серверов для установления соединения с любым источником данных

    Вместо того, чтобы повторно устанавливать одни и те же настройки соединения при каждом применении функций OPENROWSET или OPENDATASOURCE, SQL Server позволяет сохранить эти параметры и назначить им идентификатор, чтоб их можно было повторно использовать, не вводя параметры конфигурации каждый раз заново; эта технология получила название "связанный сервер". Связанный сервер является, по сути, виртуальным сервером.

    Связанные серверы имеют еще одно преимущество: их конфигурацию можно настраивать с помощью кода T-SQL или через интерфейс SQL Server Management Studio.

    Важно. Использование связанных серверов позволяет использовать функции, не доступные при использовании функций OPENROWSET или OPENDATASOURCE. Например, можно:
  • Управлять статической безопасностью
  • Сопоставлять имена входа в систему
  • Запрашивать информацию каталога
  • Настраивать различные параметры соединения, такие, как время ожидания соединения по умолчанию.
  • Настройка связанного сервера при помощи T-SQL

    Чтобы сконфигурировать связанный сервер с помощью кода T-SQL, необходимо использовать хранимую процедуру sp_addlinkedserver. Хранимая процедура sp_addlinkedserver для настройки конфигурации удаленных источников данных принимает несколько параметров.

    В следующем примере демонстрируется готовый код T-SQL, необходимый для добавления удаленного сервера SQL Server в качестве связанного сервера. Код в этом разделе можно найти в файлах примеров в папке SqlScripts под именем LinkedServer.sql.

    EXEC sp_addlinkedserver @server = "Sales",
    @srvproduct='SQL Server' GO
    Важно. Предыдущие версии SQL Server предоставляли хранимую процедуру sp_addserver, которая использовалась для добавления ссылки на удаленный сервер. Эта хранимая процедура доступна и в SQL Server 2005, но она предназначена только для обеспечения обратной совместимости. Поддержка хранимой процедуры sp_addserver будет исключена из следующих версий SQL Server. В дальнейшем следует использовать только хранимую процедуру sp_addlinkedserver.

    Код для создания связанного сервера для файла Microsoft Excel.

    - Связанный сервер для файла 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

    Следующий код создает связанный сервер для базы данных Access.

    - Связанный сервер для базы данных Access EXEC sp_addlinkedserver
    @server = "PreSales",
    @provider = "Microsoft.Jet.OLEDB.4.0",
    @srvproduct = "OLEDB Provider for Jet",
    @datasrc = "C:\Documents and Settings\User\My Documents\
                        Microsoft Press\Sql2005SBS_AppliedTechniques\
                        Chapter08\Northwind.mdb' GO

    Еще один код, показывающий, как создать связанный сервер для базы данных стороннего разработчика, например, Oracle.

    - Связанный сервер для базы данных Oracle 
    EXEC sp_addlinkedserver
    @server = "PostSales",
    @srvproduct = "Oracle",
    @provider = "msdaora",
    @datasrc = "PostSalesDB" GO

    Проверяем, какие связанные сервера определены в данный момент

  • Откройте SQL Server Management Studio и установите соединение с экземпляром SQL Server.
  • Запросите значения из системного представления sys.servers с фильтрацией по столбцу is_linked, как показано в следующем примере.
    SELECT * FROM sys.servers WHERE is_linked = 1
  • Изучите результаты, возвращенные системным представлением Важно. При регистрации связанных серверов SQL Server не выполняет проверки корректности указанных параметров или существования имени сервера. Хранимая процедура sp_addlinkedserver всегда выполняется успешно. В случае, если вы указали неправильное значение параметра, об этом можно узнать только в процессе выполнения.
  • Удаление сконфигурированных связанных серверов

    Если нужно удалить уже зарегистрированный связанный сервер, можно воспользоваться хранимой процедурой sp_dropserver, как показано в следующем примере кода.

    EXEC sp_dropserver "MyEmployees" GO

    Хранимая процедура sp_dropserver получает один параметр, идентификатор связанного сервера, который нужно удалить.

    Настраиваем конфигурацию связанного сервера через интерфейс SQL Server Management Studio

    Конфигурацию связанных серверов можно настраивать и через SQL Server Management Studio.

  • Запустите SQL Server Management Studio и установите соединение с сервером, который нужно настроить.
  • Откройте Object Explorer (Обозреватель объектов) через меню View (Вид), как показано ниже, или нажав клавишу F8. Обозреватель объектов позволяет без лишних сложностей найти все сервисы и их компоненты определенного экземпляра сервера SQL Server и управлять ими.
  • В дереве объектов разверните экземпляр сервера SQL Server, который нужно сконфигурировать, откройте папку
  • Щелкните правой кнопкой на папке Linked Servers (Связанные серверы) и выберите из контекстного меню команду New Linked Server (Создать связанный сервер), чтобы запустить мастер для настройки конфигурации связанного сервера.
  • В окне New Link Server (Создание нового связанного сервера), показанном ниже, сконфигурируйте все параметры доступ к удаленному источнику данных (см. рис. вверху следующей страницы).
  • Перейдите на страницу Security (Безопасность) в панели Select A Page (Выбор страницы) в левой части окна. В результате вы окажетесь в окне, показанном на следующем рисунке. Если удаленный источник данных требует проверки подлинности, необходимо сопоставить локальную учетную запись на локальном сервере локальной учетной записи на удаленном сервере. Если аутентифицируемое имя входа является учетной записью Windows, то при вызове удаленного источника данных SQL Server выполняет роль аутентифицированного пользователя. В противном случае, если аутентифицируемое имя входа в SQL Server является именем входа SQL Server, то при вызове удаленного источника данных SQL Server выполняет удаленный вызов с использованием учетной записи службы SQL Server.
  • Перейдите на страницу Server Options (Параметры сервера) в панели Select A Page (Выбор страницы) в левой части окна. В результате вы окажетесь в окне, показанном на следующем рисунке. Параметры сервера позволяют настроить все детали соединения с удаленным источником данных. Подробное объяснение значения каждого из этих параметров можно найти в теме "Свойства связанного сервера (Страница Параметры сервера)" в Электронной документации SQL Server 2005/
  • После настройки параметров конфигурации связанного сервера нажмите кнопку ОК. Обратите внимание на то, в дереве объектов в панели Server Explorer (Обозреватель серверов) появился новый значок, как показано ниже.

    При добавлении нового связанного сервера с помощью T-SQL или через SQL Server Management Studio будут возвращены совершенно одинаковые результаты.

  • Удаляем сконфигурированный связанный сервер

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

  • Запустите SQL Server Management Studio и установите соединение с сервером, который нужно настроить.
  • Откройте Object Explorer (Обозреватель объектов) через меню View (Вид), как показано ниже, или нажав клавишу F8.
  • В дереве объектов разверните экземпляр сервера SQL Server, который нужно сконфигурировать, откройте папку Server Object (Объекты сервера), а затем папку Linked Servers (Связанные серверы).
  • Нажмите правой кнопкой мыши на узле связанного сервера, который вы хотели бы удалить, и выберите из контекстного меню команду 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

    Вставка, обновление или удаление данных на удаленном источнике данных в SQL Server

    Методы, которые использовались для чтения данных из удаленных источников из SQL Server, можно также применить для выполнения предложений INSERT, UPDATE и DELETE на удаленных источниках данных.

    Используем нерегламентированные соединения для вставки, обновления и удаления данных

    Функции OPENROWSET и OPENDATASOURCE могут использоваться в предложениях INSERT, UPDATE и DELETE для манипуляций с данными на удаленном источнике данных.

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

    Следующий код показывает, как добавить новую запись в файл Excel. (Код в этом разделе можно найти в файлах примеров в папке SqlScripts под именем UsingAdHocToUpdate.sql )/

    INSERT OPENROWSET(
    "Microsoft.Jet.OLEDB.4.0",
    "Excel 8.0;DATABASE=C:\Documents and Settings\User\My Documents\
    Microsoft Press\Sql2005SBS_AppliedTechniques\
    Chapter08\EmployeeList.xls', "SELECT FirstName, LastName, Title, Region FROM [Employees$]") VALUES ("John",
    "Doe",
    "Consultant",
    "CA")

    Код, который приводится ниже, показывает, как вставить новую запись в удаленную базу данных SQL Server.

    - Вставка в удаленную базу данных SQl Server INSERT OPENROWSET(
    "SQLOLEDB",
    "Server=Sales; Trusted_Connection=yes;",
    "SalesDB.Sales.Orders") VALUES (175642, "2001-10-04", 6500.05) GO

    Функция OPENDATASOURCE может использоваться для вставки ( INSERT ), обновления ( UPDATE ) или удаления ( DELETE ) данных в удаленной таблице с полным уточненным именем. В этом случае запрос определять не нужно. Следующий код демонстрирует этот метод на примере файла Microsoft Office Excel.

    INSERT OPENDATASOURCE( "Microsoft.Jet.OLEDB.4.0", "Excel 8.0;DATABASE=C:\Documents and Settings\User\My Documents\
    Microsoft Press\Sql2005SBS_AppliedTechniques\Chapter08\
    EmployeeList.xls')...[Employees$] VALUES ("99",
    "Doe",
    "John",
    "Tester",
    "Mr.",
    '12/06/1964',
    "5/1/1995",
    "507 20th Ave. S.",
    "Seattle",
    "WA",
    "98122",
    "USA",
    "(206) 555-9857",
    "5467",
    "testing",
    "2")

    Используем для вставки, обновления и удаления данных связанные серверы

    После того, как вы создали связанный сервер при помощи хранимой процедуры sp_addlinkedserver, можно использовать эту ссылку для выполнения предложений INSERT, UPDATE и DELETE в удаленной таблице с полным уточненным именем.

    Следующий код демонстрирует этот метод на примере удаленной базы данных SQL Server. (Код из этого раздела можно найти в файлах примеров в папке SqlScripts под именем UsingLinkedServerToUpdate.sql ).

    EXEC sp_addlinkedserver @server = "SalesServer",
    @srvproduct=N'SQL Server' GO
    DELETE SalesServer.SalesDB.Sales.Orders WHERE Quarter = 3

    Для того, чтобы использовать функцию OPENQUERY, вместо определения выполняемого запроса нужно указать имя таблицы, в которой нужно выполнить операции INSERT, UPDATE или DELETE.

    Следующий код показывает этот метод на примере файла 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
    UPDATE OPENQUERY(MyEmployees, "SELECT * FROM [Employees$]") SET LastName = "Newname" WHERE Region = "CA"

    Заключение

    В этой лекции речь шла, главным образом, о том, как читать и записывать данные на удаленном источнике. Удаленные источники данных могут представлять собой другие экземпляры сервера SQL Server или источники данных других типов. Все действия, которые были описаны выше, можно выполнять через инструкции T-SQL. SQL Server Management Studio предоставляет интерфейс пользователя для управления удаленными источниками данных.

    Краткий справочник по 4 лекции

    Чтобы Выполните следующие действия
    Иногда выполнять запросы к удаленному источнику посредством отправки транзитного запроса Используйте функцию OPENROWSET.
    Иногда выполнять запросы к удаленным ресурсам посредством ссылки на объект с использованием четырехкомпонентного имени Используйте функцию OPENDATASOURCE.
    Создать новый связанный сервер через интерфейс Microsoft SQL Server Management Studio В окне Обозревателя объектов SQLServer Management Studio разверните экземпляр SQL Server, откройте папку Server Objects (Объекты сервера), а затем папку Linked Servers (Связанные серверы).
    Создать новый связанный сервер путем программирования Используйте системную хранимую процедуру sp_addlinkedserver.
    Удалить связанный сервер посредством программирования Используйте системную хранимую процедуру sp_dropserver.
    Часто выполнять запросы к удаленному ресурсу посредством отправки транзитного запроса Определите связанный сервер и используйте функцию OPENQUERY.
    Часто выполнять запросы к удаленным ресурсам посредством ссылки на объект с использованием четырехкомпонентного имени Определите связанный сервер и используйте идентификатор связанного сервера в качестве компонента <ИмяСервера> полного уточненного имени.
    Часто выполнять инструкции DDL и хранимые процедуры в отношении удаленного ресурса Определите связанный сервер и используйте конструкцию EXECUTE…AT.
    Вернуться к учебному плану