sp_execute_remote (Azure SQL Database)
適用対象:Azure SQL Database
1 つのリモート Azure SQL Database または水平方向のパーティション構成でシャードとして機能するデータベースのセットに対して Transact-SQL ステートメントを実行します。
ストアド プロシージャは、エラスティック クエリ機能の一部です。 シャーディング (水平方向のパーティション分割) については、「Azure 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 ビット サーバーでは、文字列のサイズは 2 GB に制限され、 nvarchar(max) の最大サイズになります。
注意
@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)