sp_execute_remote (Azure SQL Database)

適用於: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)