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

Область применения:База данных SQL Azure

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

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

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

Синтаксис

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

Аргументы

[ @data_source_name = ] имя источника данных
Определяет внешний источник данных, в котором выполняется инструкция. См. статью CREATE EXTERNAL DATA SOURCE (Transact-SQL) (Transact-SQL). Внешний источник данных может быть типом "RDBMS" или "SHARD_MAP_MANAGER".

[ @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 — это заполнитель, указывающий дополнительные определения параметров. Каждый параметр, указанный в @stmtmust, определяется в @params. Если инструкция Transact-SQL или пакет в @stmt не содержит параметров, @params не требуется. Этот аргумент по умолчанию принимает значение NULL.

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

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

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

0 (успешное завершение) или ненулевое значение (неуспешное завершение)

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

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

Разрешения

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

Замечания

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

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

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

sp_execute_remoteможно использовать аналогично sp_executesql (Transact-SQL).

Примеры

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

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

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

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

Создайте учетные данные в области базы данных в пользовательской базе данных, указав учетные данные администратора для базы данных master. Создайте внешний источник данных, указывающий на базу данных master и указав учетные данные в области базы данных. Затем в пользовательской базе данных выполните процедуру sp_set_firewall_rule в базе данных master. Для sp_set_firewall_rule процедуры требуется 3 параметра и требуется @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';

См. также:

CREATE DATABASE SCOPED CREDENTIAL
CREATE EXTERNAL DATA SOURCE (Transact-SQL)