sp_execute_remote (Azure SQL Database)

適用対象:Azure SQL データベース

行方向のパーティション分割方式でシャードとして機能する単一のリモート 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= ] ステートメント
これはTransact-SQL ステートメントまたはバッチを含む Unicode 文字列です。 @stmtは、Unicode 定数または Unicode 変数である必要があります。 + 演算子で 2 つの文字列を連結するなどの複雑な Unicode 式は使用できません。 文字定数も使用できません。 Unicode 定数を指定する場合は、プレフィックスとして N を付ける必要があります。たとえば、Unicode 定数 N'sp_who' は有効ですが、文字定数 'sp_who' は有効ではありません。 文字列のサイズは、使用可能なデータベース サーバー メモリによってのみ制限されます。 64 ビット サーバーでは、文字列のサイズは nvarchar(max) の最大サイズである2 GB に制限されます。

注意

@stmtには、変数名と同じ形式のパラメーターを含めることができます。例えば N'SELECT * FROM HumanResources.Employee WHERE EmployeeID = @IDParameter' など。

@stmt に含まれる各パラメーターには、@params パラメーター定義リストとパラメーター値リストの両方に対応するエントリが必要です。

[ @params= ] N'@parameter_name**data_type [ ,... n ] '
これは @stmt に埋め込まれているすべてのパラメーターの定義を含む 1 つの文字列です。文字列は、Unicode 定数または Unicode 変数である必要があります。 各パラメーター定義は、パラメーター名とデータ型で構成されます。 n は、追加のパラメーター定義を示すプレースホルダーです。 @stmtmust で指定されたすべてのパラメーターは、@params で定義されます。 @stmt の Transact-SQL ステートメントまたはバッチにパラメーターが含まれていない場合、@paramsは必要ありません。 このパラメーターの既定値は NULL です。

[ @param1= ] 'value1'
パラメーター文字列に定義する最初のパラメーターの値を指定します。 Unicode 定数または Unicode 変数を指定できます。 @stmt に含まれるすべてのパラメーターにパラメーター値を指定する必要があります。@stmt の Transact-SQL ステートメントまたはバッチにパラメーターがない場合、値は必要ありません。

n
これは追加パラメーターの値のプレースホルダーです。 定数または変数のみを指定できます。 関数や、演算子を使用して構築された式など、より複雑な式を値にすることはできません。

リターン コードの値

0 (成功) または 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 データベースで 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)