sp_execute_remote (Azure SQL Database)
在單一遠端 Azure SQL Database 或在水平資料分割配置中作為分區的一組資料庫上,執行 Transact-SQL 陳述式。
預存程序是彈性查詢功能的一部分。 請參閱 Azure SQL Database 彈性資料庫查詢概觀和分區化的彈性資料庫查詢 (水平資料分割)。
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= ] statement
是一個 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 (成功) 或非零 (失敗)
結果集
從第一個 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 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應