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)
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de