sp_execute_remote (Azure SQL Database)
適用対象: Azure SQL データベース
行方向のパーティション分割方式でシャードとして機能する単一のリモート Azure SQL Database またはデータベースのセットに対して Transact-SQL (T-SQL) ステートメントを実行します。
ストアド プロシージャは、エラスティック クエリ機能の一部です。 「Azure SQL Database のエラスティック クエリの概要 (プレビュー)」と「スケールアウトされたクラウド データベース (プレビュー) 全体のレポート」を参照してください。
構文
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 EXTERNAL DATA SOURCE」を参照してください。 外部データ ソースには、 RDBMS
または SHARD_MAP_MANAGER
の種類を指定できます。
[ @stmt = ] 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 は、追加のパラメーター定義を示すプレースホルダーです。 @stmt で指定されているすべてのパラメーターが、@params で定義されている必要があります。 @stmt の Transact-SQL ステートメントまたはバッチにパラメーターが含まれていない場合、@params は必要ありません。 このパラメーターの既定値は NULL
です。
[ @param1 = ] 'value1'
パラメーター文字列に定義する最初のパラメーターの値。 Unicode 定数または Unicode 変数を指定できます。 @stmt に含まれるすべてのパラメーターにパラメーター値を指定する必要があります。@stmt の Transact-SQL ステートメントまたはバッチにパラメーターがない場合、値は必要ありません。
n
これは追加パラメーターの値のプレースホルダーです。 定数または変数のみを指定できます。 関数や、演算子を使用して構築された式など、より複雑な式を値にすることはできません。
リターン コードの値
0
(成功) または 0 以外 (失敗)。
結果セット
最初の T-SQL ステートメントから結果セットを返します。
アクセス許可
ALTER ANY EXTERNAL DATA SOURCE
権限が必要です。
解説
sp_execute_remote
パラメーターは、構文セクションで説明したように、特定の順序で入力する必要があります。 パラメーターが順に入力されていない場合は、エラー メッセージが表示されます。
sp_execute_remote
は、バッチ、および名前の有効範囲に関して、EXECUTE と同じように動作します。 @stmt パラメーター内の T-SQL ステートメントまたはバッチは、sp_execute_remote
ステートメントが実行されるまでコンパイルされません。
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
プロシージャには 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';