sp_execute_remote (Azure SQL Database)
適用於: Azure SQL Database
在單一遠端 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
識別執行陳述式的外部資料源。 另請參閱 CREATE 外部資料來源。 外部資料來源的類型可以是 RDBMS
或 SHARD_MAP_MANAGER
。
[ @stmt = ] stmt
是一個 Unicode 字串,其中包含 Transact-SQL 陳述式或批次。 @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'
在 @params 參數定義清單和參數值清單中,@stmt 所包含的每個參數都必須有對應的項目。
[ @params = ] N'@parameter_name data_type [ ,... n ]'
是一個字串,其中包含內嵌在 @stmt 中的所有參數定義。字串必須是 Unicode 常數或 Unicode 變數。 每個參數定義都由參數名稱和資料類型組成。 n 是一個預留位置,表示其他參數定義。 @stmt 所指定的每個參數都必須在 @params 中定義。 如果 Transact-SQL 陳述式或 @stmt 中的批次不包含參數,則不需要 @params。 此參數的預設值為 NULL
。
[ @param1 = ] 'value1'
這是參數字串所定義的第一個參數的值。 這個值可以是 Unicode 常數或 Unicode 變數。 必須為 @stmt 所含的每個參數提供參數值。當 Transact-SQL 陳述式或 @stmt 中的批次沒有參數時,就不需要這些值。
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_execute_remote
可以用類似方式 sp_executesql。
範例
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
程序需要三個參數,而且需要@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';