sp_execute_remote (Azure SQL-Datenbank)

Gilt für: Azure SQL-Datenbank

Führt eine Transact-SQL (T-SQL)-Anweisung auf einer einzelnen entfernten Azure SQL-Datenbank oder einem Satz von Datenbanken aus, die als Shards in einem horizontalen Partitionierungs-Schema dienen.

Die gespeicherte Prozedur ist Teil des flexiblen Abfragefeatures. Siehe Azure SQL-Datenbank flexible Abfrageübersicht (Vorschau) und Berichterstellung über skalierte Cloud-Datenbanken (Vorschau) hinweg.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

[ @data_source_name = ] data_source_name

Identifiziert die externe Datenquelle, in der die Anweisung ausgeführt wird. Siehe ERSTELLEN EINER EXTERNEN DATENQUELLE. Die externe Datenquelle kann vom Typ RDBMS oder vom Typ SHARD_MAP_MANAGER sein.

[ @stmt = ] stmt

Eine Unicode-Zeichenfolge, die eine Transact-SQL-Anweisung oder einen Batch enthält. @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 beispielsweise 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 ]'

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 mehr Parameterdefinitionen. Jeder in @stmt angegebene Parameter muss in @params definiert werden. 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 = ] 'value1'

Ein 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 der zusätzlichen 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).

Resultset

Gibt das Resultset aus der ersten T-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 dasselbe Verhalten wie EXECUTE in Bezug auf Batches und den Geltungsbereich von Namen. Die T-SQL-Anweisung oder ein Transact-SQL-Batch im @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 auf ähnliche Weise wie sp_executesql verwendet werden.

Beispiele

A. Einfaches Beispiel

Im folgenden Beispiel wird eine grundlegende 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';

B. Beispiel mit mehreren Parametern

Dieses Beispiel führt die folgenden Aktionen aus:

  1. Erstellt eine datenbankabhängige Berechtigung in einer Benutzerdatenbank, die die Administratorberechtigung für die master-Datenbank angibt.

  2. Erstellt eine externe Datenquelle, die auf die master-Datenbank verweist, und geben Sie die Zugangsdaten für die Datenbank an.

  3. Führt die sp_set_firewall_rule-Prozedur in der master-Datenbank aus. Für die Prozedur sp_set_firewall_rule sind drei Parameter erforderlich, und der Parameter @name 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';