sp_execute_remote (Azure SQL Database)

Se aplica a:Azure SQL Database

Ejecuta una instrucción de Transact-SQL en una sola instancia remota de Azure SQL Database o un conjunto de bases de datos que actúan como particiones en un esquema de particiones horizontales.

El procedimiento almacenado forma parte de la característica de consulta elástica. Consulte Introducción a las consultas de bases de datos elásticas de Azure SQL Database y Consultas de bases de datos elásticas para particionamiento (creación de particiones horizontales).

Convenciones de sintaxis de Transact-SQL

Sintaxis

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 el origen de datos externo donde se ejecuta la instrucción. Consulte CREATE EXTERNAL DATA SOURCE (Transact-SQL). El origen de datos externo puede ser de tipo "RDBMS" o "SHARD_MAP_MANAGER".

[ @stmt= ] statement
Es una cadena de Unicode que contiene una instrucción o lote de Transact-SQL. @stmt debe ser una constante Unicode o una variable Unicode. No se permite utilizar expresiones Unicode más complejas, como una concatenación de dos cadenas con el operador +. Las constantes de caracteres no están permitidas. Si se especifica una constante Unicode, debe ir precedida de N. Por ejemplo, la constante Unicode N'sp_who es válida, pero la constante de caracteres 'sp_who' no lo es. El tamaño de la cadena solo está limitado por la memoria disponible en el servidor de bases de datos. En los servidores de 64 bits, el tamaño de la cadena está limitado a 2 GB, el tamaño máximo de nvarchar(max).

Nota:

@stmt puede contener parámetros que tengan el mismo formato que un nombre de variable, por ejemplo: N'SELECT * FROM HumanResources.Employee WHERE EmployeeID = @IDParameter'

Cada parámetro incluido en @stmt debe tener una entrada correspondiente en la lista de definición de parámetros @params y en la lista de valores de parámetros.

[ @params= ] N'@parameter_name**data_type [ ,... n ] '
Es una cadena que contiene las definiciones de todos los parámetros que se han insertado en @stmt. La cadena debe ser una constante Unicode o una variable Unicode. Cada definición de parámetro se compone de un nombre de parámetro y un tipo de datos. n es un marcador de posición que indica definiciones de parámetros adicionales. Todos los parámetros especificados en @stmtmust deben definirse en @params. Si el lote o la instrucción de Transact-SQL de @stmt no contiene parámetros, @params no es necesario. El valor predeterminado de este parámetro es NULL.

[ @param1= ] 'value1'
Es un valor para el primer parámetro definido en la cadena de parámetros. El valor puede ser una constante Unicode o una variable Unicode. Debe haber un valor de parámetro proporcionado para cada parámetro incluido en @stmt. Los valores no son necesarios si la instrucción o el lote de Transact-SQL en @stmt no tiene parámetros.

n
Es un marcador de posición para los valores de los parámetros adicionales. Los valores solo pueden ser constantes o variables. Los valores no pueden ser expresiones más complejas como funciones ni expresiones generadas mediante operadores.

Valores de código de retorno

0 (correcto) o distinto de cero (error)

Conjuntos de resultados

Devuelve el conjunto de resultados de la primera instrucción SQL.

Permisos

Requiere el permiso ALTER ANY EXTERNAL DATA SOURCE.

Comentarios

Los parámetros sp_execute_remote deben especificarse en el orden específico, tal como se describe en la sección de sintaxis anterior. Si los parámetros se escriben desordenados, se producirá un mensaje de error.

sp_execute_remote tiene el mismo comportamiento que EXECUTE (Transact-SQL) en cuanto a los lotes y el ámbito de los nombres. El lote o la instrucción de Transact-SQL del parámetro sp_execute_remote @stmt no se compila hasta que se ejecuta la instrucción sp_execute_remote.

sp_execute_remote agrega una columna adicional al conjunto de resultados denominado "$ShardName" que contiene el nombre de la base de datos remota que generó la fila.

sp_execute_remote se puede usar de forma similar a sp_executesql (Transact-SQL).

Ejemplos

Ejemplo sencillo

En el ejemplo siguiente se crea y ejecuta una instrucción SELECT simple en una base de datos remota.

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

Ejemplo con parámetros múltiples

Cree una credencial de ámbito de base de datos en una base de datos de usuario y especifique las credenciales de administrador para la base de datos maestra. Cree un origen de datos externo que apunte a la base de datos maestra y especifique la credencial con ámbito de base de datos. En el ejemplo siguiente de la base de datos de usuario se ejecuta el procedimiento sp_set_firewall_rule en la base de datos maestra. El procedimiento sp_set_firewall_rule requiere tres parámetros y requiere que el parámetro @name sea 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';

Vea también:

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