sp_execute_remote(Azure SQL 数据库)
适用于:Azure SQL 数据库
在单个远程 Azure SQL 数据库或在水平分区方案中用作分片的一组数据库中执行 Transact-SQL 语句。
存储过程是弹性查询功能的一部分。 请参阅 Azure 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_remote
与 EXECUTE (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)
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈