Share via


sp_execute_remote (Banco de Dados SQL do Azure)

Aplica-se a:Banco de Dados SQL do Azure

Executa uma instrução Transact-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 das consultas de banco de dados elástico do Banco de Dados SQL do Azure e Consultas de banco de dados elástico para fragmentação (particionamento horizontal).

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

[ @data_source_name = ] datasourcename
Identifica a fonte de dados externa em que a instrução é executada. Consulte CREATE EXTERNAL DATA SOURCE (Transact-SQL). A fonte de dados externa pode ser do tipo "RDBMS" ou "SHARD_MAP_MANAGER".

[ @stmt= ] statement
É uma string Unicode que contém um lote ou instrução Transact-SQL. @stmt deve ser uma constante Unicode ou uma variável Unicode. Mais expressões Unicode complexas, como concatenar duas cadeias de caracteres com o operador +, não são permitidas. Constantes de caracteres não são permitidas. Se uma constante Unicode for especificada, ela deverá ser prefixada com um N. Por exemplo, a constante Unicode N'sp_who' é válida, mas a constante de caractere 'sp_who' 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 a mesma forma que 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 cadeia de caracteres que contém as definições de todos os parâmetros que foram inseridos no @stmt. A cadeia 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. Cada parâmetro especificado em @stmtm deve ser definido em @params. Se a instrução Transact-SQL ou lote em @stmt não contiverem parâmetros, @params não será necessário. O valor padrão para este parâmetro é NULL.

[ @param1= ] 'value1'
É um valor para o primeiro parâmetro definido na cadeia de caracteres de 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 aos 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 construídas usando os operadores.

Valores do código de retorno

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

Conjuntos de resultados

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

Permissões

Requer a permissão ALTER ANY EXTERNAL DATA SOURCE.

Comentários

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

sp_execute_remote tem o mesmo comportamento de EXECUTE (Transact-SQL) em relação aos lotes e ao escopo dos nomes. A instrução ou lote Transact-SQL no parâmetro sp_execute_remote @stmt não é compilado até que a instrução sp_execute_remote seja executada.

sp_execute_remote adiciona uma coluna adicional 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 forma semelhante a sp_executesql (Transact-SQL).

Exemplos

Exemplo simples

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

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

Exemplo com vários parâmetros

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 mestre. Cria uma fonte de dados externa apontando para o banco de dados mestre e especificando a credencial com escopo de banco de dados. O exemplo a seguir, no banco de dados do usuário, executa o procedimento sp_set_firewall_rule no banco de dados mestre. O procedimento sp_set_firewall_rule requer 3 parâmetros e o parâmetro @name deve ser 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';

Consulte também:

CRIAR UMA CREDENCIAL NO ESCOPO DO BANCO DE DADOS
CREATE EXTERNAL DATA SOURCE (Transact-SQL)