sp_execute_remote(Azure SQL 数据库)

适用于:Azure SQL 数据库

在单个远程 Azure SQL 数据库或在水平分区方案中用作分片的一组数据库中执行 Transact-SQL 语句。

存储过程是弹性查询功能的一部分。 请参阅 Azure SQL 数据库弹性数据库查询概述分片(水平分区)的弹性数据库查询

Transact-SQL 语法约定

语法

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

自变量

[ @data_source_name = ] datasourcename
标识执行语句的外部数据源。 请参阅 CREATE EXTERNAL DATA SOURCE (Transact-SQL)。 外部数据源的类型可以是“RDBMS”或“SHARD_MAP_MANAGER”。

[ @stmt= ] 语句
是包含 Transact-SQL 语句或批处理的 Unicode 字符串。 @stmt 必须是 Unicode 常量或 Unicode 变量。 不允许使用更复杂的 Unicode 表达式(例如使用 + 运算符连接两个字符串)。 不允许使用字符常量。 如果指定了 Unicode 常量,则必须使用 N 作为前缀。例如,Unicode 常量 N'sp_who' 是有效的,但是字符常量 'sp_who' 则无效。 字符串的大小仅受可用数据库服务器内存限制。 在 64 位服务器中,字符串大小限制为 2 GB,即 nvarchar(max) 的最大大小。

注意

@stmt 可以包含与变量名称形式相同的参数,例如:N'SELECT * FROM HumanResources.Employee WHERE EmployeeID = @IDParameter'

@stmt 中包含的每个参数在 @params 参数定义列表和参数值列表中均必须有对应项。

[ @params= ] N'@parameter_name**data_type [ ,... n ] '
是一个字符串,包含已嵌入到 @stmt 中的所有参数的定义。该字符串必须是 Unicode 常量或 Unicode 变量。 每个参数定义由参数名称和数据类型组成。 n 是表示附加参数定义的占位符。 必须在 @params 中定义在 @stmtmust 中指定的每个参数。 如果 @stmt 中的 Transact-SQL 语句或批处理不包含参数,则不需要使用 @params。 该参数的默认值为 NULL。

[ @param1= ] 'value1'
参数字符串中定义的第一个参数的值。 该值可以是 Unicode 常量,也可以是 Unicode 变量。 必须为 @stmt 中包含的每个参数提供参数值。当 @stmt 中的 Transact-SQL 语句或批处理没有参数时,就不需要这些值。

n
附加参数值的占位符。 这些值只能为常量或变量, 不能是很复杂的表达式(例如函数)或使用运算符生成的表达式。

返回代码值

0(成功)或非零(失败)

结果集

从第一个 SQL 语句返回结果集。

权限

需要 ALTER ANY EXTERNAL DATA SOURCE 权限。

备注

必须按上述语法部分中所述的特定顺序输入 sp_execute_remote 参数。 如果这些参数的输入顺序不正确,则会显示一条错误消息。

在批处理和名称作用域方面,sp_execute_remoteEXECUTE (Transact-SQL) 的行为相同。 sp_execute_remote @stmt 参数中的 Transact-SQL 语句或批处理在执行 sp_execute_remote 语句后才会进行编译。

sp_execute_remote 向名为“$ShardName”的结果集添加一个附加列,其中包含生成行的远程数据库的名称。

sp_execute_remote 可以类似于 sp_executesql (Transact-SQL) 使用。

示例

简单示例

以下示例在远程数据库上创建和执行简单的 SELECT 语句。

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

具有多个参数的示例

在用户数据库中创建数据库范围的凭据,指定 master 数据库的管理员凭据。 创建指向 master 数据库并指定数据库范围的凭据的外部数据源。 然后,以用户数据库中的示例为例,执行 master 数据库中的 sp_set_firewall_rule 过程。 sp_set_firewall_rule 过程需要 3 个参数,并且要求 @name 参数为 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';

另请参阅:

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