Compartilhar via


sp_execute_remote (Banco de Dados SQL do Azure)

Aplica-se a: Banco de Dados SQL do Azure

Ele executa uma instrução Transact-SQL (T-SQL) em um único banco de dados SQL do Azure remoto ou em um conjunto de bancos de dados que funcionam como fragmentos em um esquema de particionamento horizontal.

O procedimento armazenado faz parte do recurso de consulta elástica. Consulte Visão geral da consulta elástica do Banco de Dados SQL do Azure (preview) e Relatórios em bancos de dados de nuvem expandidos (preview).

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

[ @data_source_name = ] data_source_name

Identifica a fonte de dados externa em que a instrução é executada. Confira CRIAR FONTE DE DADOS EXTERNA. A fonte de dados externa pode ser do tipo RDBMS ou SHARD_MAP_MANAGER.

[ @stmt= ] stmt

Uma sequência Unicode que contém uma ou instrução Transact-SQL ou lote. @stmt deve ser uma constante Unicode ou uma variável Unicode. Expressões Unicode mais complexas, como concatenação de duas sequências de caracteres com o operador + não são permitidas. Constantes de caracteres não são permitidas. Se for especificada uma constante Unicode, ela deverá ser prefixada com um N. Por exemplo, a constante Unicode N'sp_who' é válida, mas a constante 'sp_who' de caractere não é.

O tamanho da cadeia de caracteres é limitado apenas pela memória disponível do servidor de banco de dados. Em servidores de 64 bits, o tamanho da cadeia de caracteres é limitado a 2 GB, o tamanho de máximo de nvarchar(max).

Observação

@stmt pode conter parâmetros com o mesmo formato de um nome de variável, por exemplo: N'SELECT * FROM HumanResources.Employee WHERE EmployeeID = @IDParameter'.

Cada parâmetro incluído em @stmt deve ter uma entrada correspondente na lista de definições de parâmetro @params e na lista de valores de parâmetro.

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

Uma sequência de caracteres que contém as definições de todos os parâmetros que foram inseridos no @stmt. A sequência de caracteres deve ser uma constante Unicode ou uma variável Unicode. Cada definição de parâmetro consiste em um nome de parâmetro e um tipo de dados. n é um espaço reservado que indica definições de parâmetro adicionais. Todo parâmetro especificado em @stmt deve estar definido em @params. Se a instrução Transact-SQL ou lote em @stmt não contiver parâmetros, @params não será necessário. O valor padrão para esse parâmetro é NULL.

[ @param1 = ] 'value1'

Um valor para o primeiro parâmetro definido na sequência de caracteres do parâmetro. O valor pode ser uma constante Unicode ou uma variável Unicode. Deve haver um valor de parâmetro fornecido para cada parâmetro incluído no @stmt. Os valores não são necessários quando a instrução Transact-SQL ou o lote no @stmt não tem parâmetros.

n

Um espaço reservado para os valores de parâmetros adicionais. Os valores só podem ser constantes ou variáveis. Os valores não podem ser expressões mais complexas, como funções ou expressões criadas usando operadores.

Valores do código de retorno

0 (êxito) ou não zero (falha).

Conjunto de resultados

Retorna o conjunto de resultados da primeira instrução T-SQL.

Permissões

Requer a permissão ALTER ANY EXTERNAL DATA SOURCE.

Comentários

Parâmetros de sp_execute_remote devem ser inseridos na ordem específica, conforme descrito na seção Sintaxe acima. Se os parâmetros forem inseridos na ordem incorreta, será exibida uma mensagem de erro.

sp_execute_remote tem o mesmo comportamento de EXECUTAR em relação aos lotes e ao escopo de nomes. A instrução T-SQL ou lote no parâmetro @stmt não será compilada até que a instrução sp_execute_remote seja executada.

sp_execute_remote adiciona uma coluna ao conjunto de resultados chamada $ShardName, que contém o nome do banco de dados remoto que produziu a linha.

sp_execute_remote pode ser usado de maneira semelhante ao sp_executesql.

Exemplos

R. Exemplo básico

O exemplo a seguir cria e executa uma instrução SELECT básica em um banco de dados remoto.

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

B. Exemplo com vários parâmetros

Este exemplo executa as seguintes ações:

  1. Ela cria uma credencial com escopo de banco de dados em um banco de dados de usuário, especificando as credenciais de administrador para o banco de dados master.

  2. Ela cria uma fonte de dados externa apontando para o banco de dados master e especificando a credencial com escopo de banco de dados.

  3. Ela executa o procedimento sp_set_firewall_rule no banco de dados master. O procedimento sp_set_firewall_rule requer três parâmetros e requer que o parâmetro @name seja Unicode.

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';