sp_execute_remote (Azure SQL Database)
適用対象:Azure SQL データベース
行方向のパーティション分割方式でシャードとして機能する単一のリモート Azure SQL Database またはデータベースのセットに対して Transact-SQL ステートメントを実行する
ストアド プロシージャは、エラスティック クエリ機能の一部です。 シャーディング (水平パーティション分割) については、「Azure SQL Database のエラスティック データベース クエリの概要」と「エラスティック データベース クエリ」に関するページを参照してください。
構文
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)
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示