sp_execute_remote(Azure SQL 数据库)
适用于: Azure SQL 数据库
在单个远程 Azure SQL 数据库或在水平分区方案中用作分片的一组数据库中执行 Transact-SQL (T-SQL) 语句。
存储过程是弹性查询功能的一部分。 请参阅 Azure SQL 数据库弹性池概述(预览版)和横向扩展云数据库的报告(预览版)。
语法
sp_execute_remote
[ @data_source_name = ] data_source_name
, [ @stmt = ] stmt
[
{ , [ @params = ] N'@parameter_name data_type [ , ...n ]' }
{ , [ @param1 = ] 'value1' [ , ...n ] }
]
[ ; ]
参数
[ @data_source_name = ] data_source_name
标识执行语句的外部数据源。 请参阅创建外部数据源。 外部数据源的类型可以是 RDBMS
或 SHARD_MAP_MANAGER
。
[ @stmt = ] 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 中定义在 @stmt 中指定的每个参数。 如果 @stmt 中的 Transact-SQL 语句或批处理不包含参数,则不需要使用 @params。 此参数的默认值为 NULL
。
[ @param1 = ] 'value1'
参数字符串中定义的第一个参数的值。 该值可以是 Unicode 常量,也可以是 Unicode 变量。 必须为 @stmt 中包含的每个参数提供参数值。当 @stmt 中的 Transact-SQL 语句或批处理没有参数时,就不需要这些值。
n
附加参数值的占位符。 这些值只能为常量或变量, 不能是很复杂的表达式(例如函数)或使用运算符生成的表达式。
返回代码值
0
(成功)或非零(失败)。
结果集
从第一个 T-SQL 语句返回结果集。
权限
需要 ALTER ANY EXTERNAL DATA SOURCE
权限。
注解
必须按语法部分中所述的特定顺序输入 sp_execute_remote
参数。 如果这些参数的输入顺序不正确,则会显示一条错误消息。
sp_execute_remote
与 EXECUTE 的行为相同,无论是批处理还是名称的范围。 直到执行 sp_execute_remote
语句,才会编译 @stmt 参数中的 T-SQL 语句或批处理。
sp_execute_remote
向名为“$ShardName
”的结果集添加一个附加列,其中包含生成行的远程数据库的名称。
可以与 sp_executesql 的方式使用 sp_execute_remote
。
示例
A. 基本示例
以下示例在远程数据库上创建和执行基本的 SELECT
语句。
EXEC sp_execute_remote
N'MyExtSrc',
N'SELECT COUNT(w_id) AS Count_id FROM warehouse';
B. 具有多个参数的示例
此示例执行以下操作:
在用户数据库中创建数据库范围的凭据,指定
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';