Поделиться через


sp_execute_remote (база данных SQL Azure)

Применимо к: База данных SQL Azure

Выполняет инструкцию Transact-SQL (T-SQL) на одном удаленном База данных SQL Azure или наборе баз данных, которые служат сегментами в горизонтальной схеме секционирования.

Хранимая процедура является частью функции эластичного запроса. См. База данных SQL Azure обзор эластичных запросов (предварительная версия) и отчеты по масштабируемым облачным базам данных (предварительная версия).

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_execute_remote
    [ @data_source_name = ] data_source_name
    , [ @stmt = ] stmt
    [
        { , [ @params = ] N'@parameter_name data_type [ , ...n ]' }
        { , [ @param1 = ] 'value1' [ , ...n ] }
    ]
[ ; ]

Аргументы

[ @data_source_name = ] data_source_name

Определяет внешний источник данных, в котором выполняется инструкция. См. раздел CREATE EXTERNAL DATA SOURCE. Внешний источник данных может быть типом RDBMS или SHARD_MAP_MANAGER.

[ @stmt = ] stmt

Строка Юникода, содержащая инструкцию Или пакет Transact-SQL. @stmt должен быть константой Юникода или переменной Юникода. Более сложные выражения Юникода, такие как объединение двух строк с оператором + , не допускаются. Константы символов не допускаются. Если указана константа Юникода, она должна быть префиксирована с помощью .N Например, константа Юникода допустима, но константа N'sp_who' 'sp_who' символа не является.

Размер строки ограничивается только доступной серверу баз данных памятью. На 64-разрядных серверах размер строки ограничен 2 ГБ, максимальный размер nvarchar(max).

Примечание.

@stmt может содержать параметры с той же формой, что и имя переменной, например: N'SELECT * FROM HumanResources.Employee WHERE EmployeeID = @IDParameter'

Каждый параметр, включенный в @stmt, должен иметь соответствующую запись в списке определений параметров @params и списке значений параметров.

[ @params = ] N'@parameter_name data_type [ ,... n ]'

Одна строка, содержащая определения всех параметров, внедренных в @stmt. Строка должна быть либо константой Юникода, либо переменной Юникода. Определение каждого параметра состоит из имени параметра и типа данных. n — это заполнитель, указывающий больше определений параметров. Каждый параметр, указанный в @stmt, должен быть определен в @params. Если инструкция Transact-SQL или пакет не @stmt содержит параметров, @params не требуется. Значение параметра по умолчанию — NULL.

[ @param1 = ] 'value1'

Значение первого параметра, определенного в строке параметров. Это значение может быть константой или переменной в Юникоде. Для каждого параметра, включенного в @stmt, необходимо указать значение параметра. Значения не требуются, если инструкция Transact-SQL или пакет в @stmt не имеет параметров.

n

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

Значения кода возврата

0 (успешно) или ненулевая (сбой).

Результирующий набор

Возвращает результирующий набор из первой инструкции T-SQL.

Разрешения

Требуется разрешение ALTER ANY EXTERNAL DATA SOURCE.

Замечания

sp_execute_remoteпараметры необходимо ввести в определенном порядке, как описано в разделе синтаксиса. Если параметры введены вне порядка, возникает сообщение об ошибке.

sp_execute_remote имеет то же поведение, что и EXECUTE в отношении пакетов и области имен. Инструкция T-SQL или пакет в параметре @stmt не компилируется до sp_execute_remote выполнения инструкции.

sp_execute_remote добавляет дополнительный столбец в результирующий набор $ShardName , содержащий имя удаленной базы данных, создающей строку.

sp_execute_remote можно использовать аналогично sp_executesql.

Примеры

А. Простой пример

В следующем примере создается и выполняется базовая SELECT инструкция в удаленной базе данных.

EXEC sp_execute_remote
    N'MyExtSrc',
    N'SELECT COUNT(w_id) AS Count_id FROM warehouse';

B. Пример с несколькими параметрами

В этом примере выполняются следующие действия:

  1. Создает учетные данные в области базы данных в пользовательской базе данных, указывая учетные данные администратора для master базы данных.

  2. Создает внешний источник данных, указывающий на master базу данных и указывая учетные данные в области базы данных.

  3. Выполняет процедуру sp_set_firewall_rule master в базе данных. Процедура sp_set_firewall_rule требует трех параметров и требует @name , чтобы параметр был Юникодом.

EXEC sp_execute_remote @data_source_name = N'PointToMaster',
    @stmt = N'sp_set_firewall_rule @name, @start_ip_address, @end_ip_address',
    @params = N'@name nvarchar(128), @start_ip_address varchar(50), @end_ip_address varchar(50)',
    @name = N'TempFWRule',
    @start_ip_address = '0.0.0.2',
    @end_ip_address = '0.0.0.2';