sp_execute_remote (Azure SQL Database)

Se aplica a: Base de datos de Azure SQL

Ejecuta una instrucción de Transact-SQL (T-SQL) en una sola instancia remota de Base de datos de Azure SQL 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 consultas elásticas de Base de datos de Azure SQL (versión preliminar) e Informes de bases de datos escaladas horizontalmente en la nube (versión preliminar).

Convenciones de sintaxis de Transact-SQL

Sintaxis

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 el origen de datos externo donde se ejecuta la instrucción. Vea CREAR ORIGEN DE DATOS EXTERNO. El origen de datos externo puede ser de tipo RDBMS o SHARD_MAP_MANAGER.

[ @stmt = ] stmt

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 +. No se permiten constantes de caracteres. Si se especifica una constante de Unicode, debe tener el prefijo N. Por ejemplo, la constante de Unicode N'sp_who' es válida, pero la constant de caracteres 'sp_who' no es válida.

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

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 de 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 @stmt 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 para este parámetro es NULL.

[ @param1 = ] 'value1'

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

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).

Conjunto de resultados

Devuelve el conjunto de resultados de la primera instrucción T-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 Sintaxis. Si los parámetros se escriben desordenados, se produce un mensaje de error.

sp_execute_remote tiene el mismo comportamiento que EXECUTE en cuanto a los lotes y el ámbito de los nombres. El lote o la instrucción de T-SQL del parámetro @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.

Ejemplos

A Ejemplo básico

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

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

B. Ejemplo con parámetros múltiples

Este ejemplo realiza las siguientes acciones:

  1. Crea 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 master.

  2. Crea un origen de datos externo que apunte a la base de datos master y especifique la credencial con ámbito de base de datos.

  3. Ejecuta el procedimiento sp_set_firewall_rule en la base de datos master. 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';