sp_execute_remote (Azure SQL-Datenbank)

Gilt für:Azure SQL-Datenbank

Führt eine Transact-SQL-Anweisung für eine einzelne Azure SQL-Remotedatenbank oder einen Satz von Datenbanken aus, die als Shards in einem horizontalen Partitionierungsschema dienen.

Die gespeicherte Prozedur ist Teil des flexiblen Abfragefeatures. Siehe Azure SQL Database elastic database query overview and Elastic database queries for sharding (horizontal partitioning).See Azure SQL Database elastic database query overview and Elastic database queries for sharding (horizontal partitioning).See Azure SQL Database elastic database query overview and Elastic database queries for sharding (horizontal partitioning).

Transact-SQL-Syntaxkonventionen

Syntax

sp_execute_remote [ @data_source_name = ] datasourcename  
[ , @stmt = ] statement  
[   
  { , [ @params = ] N'@parameter_name data_type [,...n ]' }   
     { , [ @param1 = ] 'value1' [ ,...n ] }  
]  

Argumente

[ @data_source_name = ] Datenquellenname
Identifiziert die externe Datenquelle, in der die Anweisung ausgeführt wird. Siehe CREATE EXTERNAL DATA SOURCE (Transact-SQL). Die externe Datenquelle kann vom Typ "RDBMS" oder "SHARD_MAP_MANAGER" sein.

[ @stmt= ] Anweisung
Ist eine Unicode-Zeichenfolge mit einer Transact-SQL-Anweisung oder einem Transact-SQL-Batch. @stmt muss eine Unicode-Konstante oder eine Unicode-Variable sein. Komplexere Unicodeausdrücke, wie z. B. die Verkettung von zwei Zeichenfolgen mit dem +-Operator, sind nicht zulässig. Zeichenkonstanten sind nicht zulässig. Wenn eine Unicode-Konstante angegeben wird, muss ihr ein N vorangestellt werden. Die Unicode-Konstante N'sp_who' ist z. B. gültig, die Zeichenkonstante 'sp_who' jedoch nicht. Die Länge der Zeichenfolge wird nur durch den verfügbaren Arbeitsspeicher des Datenbankservers begrenzt. Auf 64-Bit-Servern ist die Größe der Zeichenfolge auf 2 GB, die Maximalgröße von nvarchar(max), begrenzt.

Hinweis

@stmt kann Parameter enthalten, die dasselbe Format wie ein Variablenname aufweisen, z. B.: N'SELECT * FROM HumanResources.Employee WHERE EmployeeID = @IDParameter'

Für jeden Parameter in @stmt ist ein entsprechender Eintrag in der Parameterdefinitionsliste @params und in der Parameterwerteliste erforderlich.

[ @params= ] N'@parameter_name**data_type [ ,... n ] '
Ist eine einzige Zeichenfolge, die die Definitionen aller Parameter enthält, die in @stmt eingebettet wurden. Die Zeichenfolge muss entweder eine Unicode-Konstante oder eine Unicode-Variable sein. Jede Parameterdefinition besteht aus einem Parameternamen und einem Datentyp. n ist ein Platzhalter für zusätzlicher Parameterdefinitionen. Jeder in @stmtmust angegebene Parameter wird in @params definiert. Wenn die Transact-SQL-Anweisung oder der Batch in @stmt keine Parameter enthält, ist @params nicht erforderlich. Der Standardwert für diesen Parameter ist NULL.

[ @param1= ] 'wert1'
Der Wert für den ersten Parameter, der in der Parameterzeichenfolge definiert ist. Bei diesem Wert kann es sich um eine Unicode-Konstante oder eine Unicode-Variable handeln. Für jeden Parameter, der in @stmt enthalten ist, muss ein Parameterwert angegeben werden. Die Werte sind nicht erforderlich, wenn die Transact-SQL-Anweisung oder der Batch in @stmt keine Parameter enthält.

n
Ein Platzhalter für die Werte zusätzlicher Parameter. Werte können nur Konstanten oder Variablen sein. Werte können keine komplexeren Ausdrücke sein, wie z. B. Funktionen oder Ausdrücke, die mithilfe von Operatoren erstellt werden.

Rückgabecodewerte

0 (Erfolg) oder ungleich 0 (Fehler)

Resultsets

Gibt das Resultset aus der ersten SQL-Anweisung zurück.

Berechtigungen

Erfordert die ALTER ANY EXTERNAL DATA SOURCE-Berechtigung.

Hinweise

sp_execute_remote Parameter müssen in der spezifischen Reihenfolge eingegeben werden, wie im obigen Syntaxabschnitt beschrieben. Wenn die Parameter nicht in der vorgegebenen Reihenfolge eingegeben werden, wird eine Fehlermeldung ausgegeben.

sp_execute_remote hat das gleiche Verhalten wie EXECUTE (Transact-SQL) in Bezug auf Batches und den Bereich der Namen. Die Transact-SQL-Anweisung oder der Batch im sp_execute_remote @stmt Parameter wird erst kompiliert, wenn die sp_execute_remote-Anweisung ausgeführt wird.

sp_execute_remote Fügt dem Resultset mit dem Namen "$ShardName" eine zusätzliche Spalte hinzu, die den Namen der Remotedatenbank enthält, die die Zeile erzeugt hat.

sp_execute_remote kann ähnlich wie sp_executesql (Transact-SQL) verwendet werden.

Beispiele

Einfaches Beispiel

Im folgenden Beispiel wird eine einfache SELECT-Anweisung in einer Remotedatenbank erstellt und ausgeführt.

EXEC sp_execute_remote  
    N'MyExtSrc',  
    N'SELECT COUNT(w_id) AS Count_id FROM warehouse'   

Beispiel mit mehreren Parametern

Erstellen Sie eine datenbankbezogene Anmeldeinformationen in einer Benutzerdatenbank, und geben Sie Administratoranmeldeinformationen für die Masterdatenbank an. Erstellen Sie eine externe Datenquelle, die auf die Masterdatenbank zeigt, und geben Sie die Anmeldeinformationen für den Datenbankbereich an. Im folgenden Beispiel in der Benutzerdatenbank wird die sp_set_firewall_rule Prozedur in der Masterdatenbank ausgeführt. Für die sp_set_firewall_rule Prozedur sind drei Parameter erforderlich, und der @name Parameter muss Unicode sein.

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

Weitere Informationen finden Sie unter:

CREATE DATABASE SCOPED CREDENTIAL
CREATE EXTERNAL DATA SOURCE (Transact-SQL)