sp_execute_remote (Azure SQL Database)

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

行方向のパーティション分割方式でシャードとして機能する単一のリモート Azure SQL Database またはデータベースのセットに対して Transact-SQL (T-SQL) ステートメントを実行します。

ストアド プロシージャは、エラスティック クエリ機能の一部です。 「Azure SQL Database のエラスティック クエリの概要 (プレビュー)」と「スケールアウトされたクラウド データベース (プレビュー) 全体のレポート」を参照してください。

Transact-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 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. 複数のパラメーターの例

この例では、次のアクションを実行します。

  1. master データベースの管理者資格情報を指定して、ユーザー データベースにデータベース スコープの資格情報を作成します。

  2. master データベースを指し、データベース 範囲認証情報を指定する外部データ ソースを作成します。

  3. 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';