Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server
Azure SQL-Datenbank
Azure SQL verwaltete Instanz SQL Analytics-Endpunkt in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL-Datenbank in Microsoft Fabric SQL in Microsoft Fabric
Mit der FOR-Klausel können Sie eine der folgenden Optionen für Abfrageergebnisse angeben.
Aktualisierungen beim Anzeigen von Abfrageergebnissen in einem Suchmoduscursor zulassen, indem Sie
FOR BROWSE
angeben.Formatieren Sie Abfrageergebnisse als XML, indem Sie
FOR XML
angeben.Formatieren Sie Abfrageergebnisse als JSON, indem Sie
FOR JSON
angeben.
Transact-SQL-Syntaxkonventionen
Syntax
[ FOR { BROWSE | <XML> | <JSON>} ]
<XML> ::=
XML
{
{ RAW [ ( 'ElementName' ) ] | AUTO }
[
<CommonDirectivesForXML>
[ , { XMLDATA | XMLSCHEMA [ ( 'TargetNameSpaceURI' ) ] } ]
[ , ELEMENTS [ XSINIL | ABSENT ]
]
| EXPLICIT
[
<CommonDirectivesForXML>
[ , XMLDATA ]
]
| PATH [ ( 'ElementName' ) ]
[
<CommonDirectivesForXML>
[ , ELEMENTS [ XSINIL | ABSENT ] ]
]
}
<CommonDirectivesForXML> ::=
[ , BINARY BASE64 ]
[ , TYPE ]
[ , ROOT [ ( 'RootName' ) ] ]
<JSON> ::=
JSON
{
{ AUTO | PATH }
[
[ , ROOT [ ( 'RootName' ) ] ]
[ , INCLUDE_NULL_VALUES ]
[ , WITHOUT_ARRAY_WRAPPER ]
]
}
FOR BROWSE
BROWSE
Gibt an, dass Updates zulässig sind, während Daten in einem DB-Library-Cursor im Durchsuchenmodus angezeigt werden. Eine Tabelle kann in einer Anwendung durchsucht werden, wenn sie eine timestamp-Spalte enthält, über einen eindeutigen Index verfügt und sich die FOR BROWSE-Option am Ende der an eine SQL Server-Instanz gesendeten SELECT-Anweisungen befindet.
Hinweis
<lock_hint> HOLDLOCK kann nicht in einer SELECT-Anweisung mit der FOR BROWSE-Option verwendet werden.
FOR BROWSE kann nicht in SELECT-Anweisungen verwendet werden, die durch den UNION-Operator miteinander verknüpft sind.
Hinweis
Wenn die eindeutigen Indexschlüsselspalten einer Tabelle NULL-Werte zulassen und sich die Tabelle auf der Innenseite eines äußeren Joins befindet, wird der Durchsuchenmodus vom Index nicht unterstützt.
Mit dem Durchsuchenmodus können Sie die Zeilen in der SQL Server-Tabelle scannen und die Daten in der Tabelle zeilenweise aktualisieren. Sie sollten für den Zugriff im Durchsuchenmodus auf eine SQL Server-Tabelle in der Anwendung eine der beiden folgenden Optionen verwenden:
Die von Ihnen für den Zugriff auf die Daten Ihrer SQL Server-Tabelle verwendete SELECT-Anweisung muss mit den Schlüsselwörtern FOR BROWSE enden. Wenn Sie die Option FOR BROWSE für die Verwendung des Durchsuchenmodus aktivieren, werden temporäre Tabellen erstellt.
Sie müssen die folgende Transact-SQL-Anweisung ausführen, um den Durchsuchenmodus mit der Option NO_BROWSETABLE zu aktivieren:
SET NO_BROWSETABLE ON
Wenn Sie die Option NO_BROWSETABLE aktivieren, verhalten sich alle SELECT-Anweisungen so, als würde die Option FOR BROWSE an die Anweisungen angefügt. Die Option NO_BROWSETABLE erstellt jedoch nicht die temporären Tabellen, welche die Option FOR BROWSE im Allgemeinen verwendet, um die Ergebnisse an Ihre Anwendung zu senden.
Wenn Sie versuchen, im Durchsuchenmodus auf die Daten aus den SQL Server-Tabellen mit einer SELECT-Abfrage zuzugreifen, die eine äußere Verknüpfungsanweisung enthält, und wenn ein eindeutiger Index für die Tabelle definiert ist, die sich innerhalb der äußeren Verknüpfungsanweisung befindet, unterstützt der Durchsuchenmodus den eindeutigen Index nicht. Der Suchmodus unterstützt den eindeutigen Index nur, wenn alle eindeutigen Indexschlüsselspalten NULL
Werte akzeptieren können. Der eindeutige Index wird durch den Durchsuchenmodus nicht unterstützt, wenn die folgenden Bedingungen zutreffen:
Sie versuchen, im Durchsuchenmodus auf die Daten aus SQL Server-Tabellen mit einer SELECT-Anweisung zuzugreifen, die eine äußere Verknüpfungsanweisung enthält.
Es ist ein eindeutiger Index für die Tabelle definiert, die sich innerhalb eines äußeren Joins befindet.
Um dieses Verhalten im Durchsuchenmodus zu reproduzieren, führen Sie folgende Schritte aus:
Erstellen Sie in SQL Server Management Studio eine Datenbank mit dem Namen
SampleDB
.Erstellen Sie in der
SampleDB
-Datenbank einetleft
Tabelle und einetright
Tabelle, die beide eine einzelne Spalte enthalten, diec1
benannt ist. Definieren Sie einen eindeutigen Index für diec1
Spalte in dertleft
Tabelle, und legen Sie die Spalte so fest, dassNULL
Werte akzeptiert werden. Führen Sie hierzu die folgenden Transact-SQL-Anweisungen in einem entsprechenden Abfragefenster aus:CREATE TABLE tleft(c1 INT NULL UNIQUE) ; GO CREATE TABLE tright(c1 INT NULL) ; GO
Fügen Sie mehrere Werte in die
tleft
Tabelle und dietright
Tabelle ein. Stellen Sie sicher, dass Sie einenNULL
Wert in dietleft
Tabelle einfügen. Führen Sie hierzu die folgenden Transact-SQL-Anweisungen in dem Abfragefenster aus:INSERT INTO tleft VALUES(2) ; INSERT INTO tleft VALUES(NULL) ; INSERT INTO tright VALUES(1) ; INSERT INTO tright VALUES(3) ; INSERT INTO tright VALUES(NULL) ; GO
Aktivieren Sie die Option
NO_BROWSETABLE
. Führen Sie hierzu die folgenden Transact-SQL-Anweisungen in dem Abfragefenster aus:SET NO_BROWSETABLE ON ; GO
Greifen Sie auf die Daten in der
tleft
Tabelle und dertright
Tabelle zu, indem Sie eine äußere Join-Anweisung in derSELECT
Abfrage verwenden. Stellen Sie sicher, dass sich dietleft
Tabelle auf der inneren Seite der äußeren Verknüpfungsanweisung befindet. Führen Sie hierzu die folgenden Transact-SQL-Anweisungen in dem Abfragefenster aus:SELECT tleft.c1 FROM tleft RIGHT JOIN tright ON tleft.c1 = tright.c1 WHERE tright.c1 <> 2 ;
Beachten Sie die folgende Ausgabe im Bereich Ergebnisse:
c1 --- NULL NULL
Nachdem Sie die SELECT
Abfrage ausgeführt haben, um im Suchmodus auf die Tabellen zuzugreifen, enthält das Resultset der abfrage SELECT
zwei NULL
Werte für die Spalte c1
in der tleft
Tabelle aufgrund der Definition der rechten äußeren Verknüpfungsanweisung. Daher können Sie im Resultset nicht zwischen den NULL
Werten unterscheiden, die aus der Tabelle stammen, und den NULL
Werten, die die rechte äußere Join-Anweisung eingeführt hat. Möglicherweise erhalten Sie falsche Ergebnisse, wenn Sie die NULL
Werte aus dem Resultset ignorieren müssen.
Hinweis
Wenn die Spalten, die im eindeutigen Index enthalten sind, nicht NULL
Werte akzeptieren, wurden alle NULL
Werte im Resultset von der rechten äußeren Verknüpfungsanweisung eingeführt.
FOR XML
XML
Gibt an, dass die Ergebnisse einer Abfrage als XML-Dokument zurückgegeben werden. Einer der folgenden XML-Modi muss angegeben werden: RAW
, AUTO
, EXPLICIT
. Weitere Informationen zu XML-Daten und SQL Server finden Sie unter FOR XML (SQL Server).
RAW [ ('ElementName') ]
Verwendet das Abfrageergebnis und wandelt jede Zeile im Resultset in ein XML-Element mit einem generischen Bezeichner <row />
als Elementtag um. Sie können optional einen Namen für das Zeilenelement angeben. Die resultierende XML-Ausgabe verwendet die angegebene ElementName
als für jede Zeile generiertes Zeilenelement. Weitere Informationen finden Sie unter Verwenden des RAW-Modus mit FOR XML.
AUTO
Gibt Abfrageergebnisse in einer einfachen, geschachtelten XML-Struktur zurück. Jede Tabelle in der FROM
-Klausel, für die mindestens eine Spalte in der SELECT
-Klausel aufgeführt ist, wird als XML-Element dargestellt. Die in der SELECT
-Klausel aufgeführten Spalten werden den entsprechenden Elementattributen zugeordnet. Weitere Informationen finden Sie unter Verwenden des AUTO-Modus mit FOR XML.
EXPLICIT
Gibt an, dass die Form der sich ergebenden XML-Struktur explizit definiert wird. In diesem Modus müssen die Abfragen auf eine bestimmte Weise geschrieben werden, sodass zusätzliche Informationen zur gewünschten Schachtelung explizit angegeben werden. Weitere Informationen finden Sie unter Verwenden des EXPLICIT-Modus mit FOR XML.
XMLDATA
Gibt das XDR-Inlineschema zurück, fügt jedoch das Stammelement dem Ergebnis nicht hinzu. Wenn XMLDATA
angegeben ist, wird das XDR-Schema an das Dokument angefügt.
Wichtig
Die richtlinie XMLDATA
ist veraltet. Verwenden Sie XSD-Generierung für RAW- und AUTO-Modus. Es gibt keinen Ersatz für die XMLDATA
-Direktive im EXPLICIT
Modus. Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.
Unterdrücken unerwünschter Zeilenumbrüche: Sie können SQL Server Management Studio (SSMS) verwenden, um eine Abfrage auszustellen, die die FOR XML
-Klausel verwendet. Dabei wird manchmal eine große Menge an XML-Zeichenfolgen zurückgegeben und in einer Rasterzelle angezeigt. Die XML-Zeichenfolgen umfassen unter Umständen mehr Zeichen als eine SSMS-Rasterzelle pro Zeile verarbeiten kann. In diesen Fällen fügt SSMS möglicherweise Zeichen für Zeilenumbrüche in lange Segmente der gesamten XML-Zeichenfolge ein. Diese Zeilenumbrüche werden ggf. in Teilzeichenfolgen eingefügt, die nicht auf mehrere Zeilen aufgeteilt werden sollten. Sie können die Zeilenumbrüche mithilfe einer Umwandlung AS XMLDATA
verhindern. Diese Lösung kann auch angewendet werden, wenn Sie FOR JSON PATH
verwenden, wie in der folgenden Transact-SQL Beispiel-SELECT
-Anweisung gezeigt:
SELECT CAST(
(SELECT column1, column2
FROM my_table
FOR XML PATH('')
)
AS VARCHAR(MAX)
) AS XMLDATA ;
XMLSCHEMA [ ('TargetNameSpaceURI') ]
Gibt das XSD-Inlineschema zurück. Beim Angeben dieser Direktive können Sie optional einen Zielnamespace-URI angeben, der den angegebenen Namespace im Schema zurückgibt. Weitere Informationen finden Sie unter Generieren eines XSD-Inlineschemas.
ELEMENTS
Gibt an, dass die Spalten als Unterelemente zurückgegeben werden. Andernfalls werden sie XML-Attributen zugeordnet. Diese Option wird nur in den Modi RAW
, AUTO
und PATH
unterstützt. Weitere Informationen finden Sie unter Verwenden des RAW-Modus mit FOR XML.
XSINIL
Gibt an, dass ein Element mit xsi:nil
Attribut auf True festgelegt für NULL
Spaltenwerte erstellt werden soll. Diese Option kann nur mit ELEMENTS
Direktive angegeben werden. Weitere Informationen finden Sie unter
ABSENT
Gibt an, dass für NULL
Spaltenwerte die entsprechenden XML-Elemente nicht im XML-Ergebnis hinzugefügt werden. Diese Option kann nur mit der ELEMENTS-Direktive angegeben werden.
PATH [ ('ElementName') ]
Generiert einen <row>
Elementwrapper für jede Zeile im Resultset. Optional können Sie einen Elementnamen für den <row>
Elementwrapper angeben. Wenn eine leere Zeichenfolge bereitgestellt wird, z. B. FOR XML PATH ('') )
, wird kein Wrapperelement generiert. Die Verwendung von PATH
bietet möglicherweise eine einfachere Alternative zu Abfragen, die mithilfe der EXPLICIT
-Direktive geschrieben wurden. Weitere Informationen finden Sie unter Verwenden des PATH-Modus mit FOR XML.
BINARY BASE64
Gibt an, dass die Abfrage die Binärdaten im BINARY BASE64-Format codiert zurückgibt. Wenn Sie Binärdaten mithilfe von RAW
und EXPLICIT
Modus abrufen, muss diese Option angegeben werden. Dies ist die Standardeinstellung im AUTO
Modus.
TYPE
Gibt an, dass die Abfrage Ergebnisse als XML-Typ zurückgibt. Weitere Informationen finden Sie unter TYPE Directive in FOR XML Queries.
ROOT [ ('RootName') ]
Gibt an, dass ein einzelnes Element der obersten Ebene dem als Ergebnis zurückgegebenen XML-Dokument hinzugefügt wird. Optional können Sie den zu generierenden Stammelementnamen angeben. Wenn der optionale Stammname nicht angegeben ist, wird das standardmäßige <root>
Element hinzugefügt.
Weitere Informationen finden Sie unter FOR XML (SQL Server).
Beispiel
Im folgenden Beispiel wird FOR XML AUTO
mit den Optionen TYPE
und XMLSCHEMA
angegeben. Aufgrund der TYPE
-Option wird das Resultset als XML-Typ an den Client zurückgegeben. Die XMLSCHEMA
-Option gibt an, dass das XSD-Inlineschema in den zurückgegebenen XML-Daten enthalten ist, während die ELEMENTS
-Option angibt, dass das XML-Ergebnis elementzentriert ist.
USE AdventureWorks2022;
GO
SELECT p.BusinessEntityID, FirstName, LastName, PhoneNumber AS Phone
FROM Person.Person AS p
JOIN Person.PersonPhone AS pph ON p.BusinessEntityID = pph.BusinessEntityID
WHERE LastName LIKE 'G%'
ORDER BY LastName, FirstName
FOR XML AUTO, TYPE, XMLSCHEMA, ELEMENTS XSINIL;
FOR JSON
Bemerkungen
In Fabric Data Warehouse muss FOR JSON
der letzte Operator in der Abfrage sein und ist daher innerhalb von Unterabfragen nicht zulässig.
JSON
Geben Sie FOR JSON an, um die Ergebnisse einer als JSON-Text formatierten Abfrage zurückzugeben. Zudem müssen Sie einen der folgenden JSON-Modi angeben: AUTO oder PATH. Weitere Informationen zur FOR JSON
-Klausel finden Sie unter Formatieren von Abfrageergebnissen als JSON mit FOR JSON (SQL Server).
AUTO
Formatieren Sie die JSON-Ausgabe automatisch basierend auf der Struktur der SELECT
-Anweisung, indem Sie FOR JSON AUTO
angeben. Weitere Informationen und Beispiele finden Sie unter Automatisches Formatieren von JSON-Ausgaben (SQL Server).
PATH
Rufen Sie die vollständige Kontrolle über das Format der JSON-Ausgabe ab, indem Sie FOR JSON PATH
angeben. mit PATH
Modus können Sie Wrapperobjekte erstellen und komplexe Eigenschaften schachteln. Weitere Informationen und Beispiele finden Sie unter Formatieren einer geschachtelten JSON-Ausgabe im PATH-Modus (SQL Server).
INCLUDE_NULL_VALUES
Schließen Sie NULL
Werte in die JSON-Ausgabe ein, indem Sie die option INCLUDE_NULL_VALUES
mit der FOR JSON
-Klausel angeben. Wenn Sie diese Option nicht angeben, enthält die Ausgabe keine JSON-Eigenschaften für NULL
Werte in den Abfrageergebnissen. Weitere Informationen und Beispiele finden Sie unter Einschließen von NULL-Werten in die JSON-Ausgabe mit der Option INCLUDE_NULL_VALUES (SQL Server).
ROOT [ ('RootName') ]
Fügen Sie der JSON-Ausgabe ein einzelnes Element auf oberster Ebene hinzu, indem Sie die option ROOT
mit der FOR JSON
-Klausel angeben. Wenn Sie die Option ROOT
nicht angeben, verfügt die JSON-Ausgabe nicht über ein Stammelement. Weitere Informationen und Beispiele finden Sie unter Hinzufügen eines Stammknotens zur JSON-Ausgabe mithilfe der ROOT-Option (SQL Server).
WITHOUT_ARRAY_WRAPPER
Entfernen Sie die eckigen Klammern, die die JSON-Ausgabe standardmäßig umgeben, indem Sie die Option WITHOUT_ARRAY_WRAPPER
mit der FOR JSON
-Klausel angeben. Wenn Sie diese Option nicht angeben, wird die JSON-Ausgabe in eckige Klammern eingeschlossen. Verwenden Sie die Option WITHOUT_ARRAY_WRAPPER
, um ein einzelnes JSON-Objekt als Ausgabe zu generieren. Weitere Informationen finden Sie unter Entfernen von rechteckigen Klammern von JSON-Ausgabe mit der Option WITHOUT_ARRAY_WRAPPER (SQL Server).
Weitere Informationen finden Sie unter Formatieren von Abfrageergebnissen als JSON mit FOR JSON (SQL Server).