SELECT - FOR-component (Transact-SQL)
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Analytics-eindpunt in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL-database in Microsoft Fabric
Gebruik de FOR-component om een van de volgende opties voor queryresultaten op te geven.
Updates toestaan tijdens het weergeven van queryresultaten in een cursor in de bladermodus door
FOR BROWSE
op te geven.Maak queryresultaten op als XML door
FOR XML
op te geven.Maak queryresultaten op als JSON door
FOR JSON
op te geven.
Transact-SQL syntaxisconventies
Syntaxis
[ 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 ]
]
}
BLADEREN
BLADEREN
Hiermee geeft u op dat updates worden toegestaan tijdens het weergeven van de gegevens in een DB-Library cursor in de bladermodus. Een tabel kan in een toepassing worden bekeken als de tabel een tijdstempel bevat kolom, de tabel een unieke index heeft en de optie FOR BROWSE zich aan het einde van de SELECT-instructies bevindt die naar een exemplaar van SQL Server worden verzonden.
Notitie
U kunt de <lock_hint> HOLDLOCK niet gebruiken in een SELECT-instructie die de optie FOR BROWSE bevat.
FOR BROWSE kan niet worden weergegeven in SELECT-instructies die zijn toegevoegd door de operator UNION.
Notitie
Wanneer de unieke indexsleutelkolommen van een tabel null kunnen zijn en de tabel zich aan de binnenkant van een outer join bevindt, wordt de index niet ondersteund door de bladermodus.
Met de bladermodus kunt u de rijen in uw SQL Server-tabel scannen en de gegevens in de tabel één rij tegelijk bijwerken. Als u toegang wilt krijgen tot een SQL Server-tabel in uw toepassing in de bladermodus, moet u een van de volgende twee opties gebruiken:
De SELECT-instructie die u gebruikt om toegang te krijgen tot de gegevens uit uw SQL Server-tabel, moet eindigen met de trefwoorden VOOR BLADEREN. Wanneer u de optie VOOR BLADEREN inschakelt om de bladermodus te gebruiken, worden tijdelijke tabellen gemaakt.
U moet de volgende Transact-SQL instructie uitvoeren om de bladermodus in te schakelen met behulp van de optie NO_BROWSETABLE:
SET NO_BROWSETABLE ON
Wanneer u de optie NO_BROWSETABLE inschakelt, gedragen alle SELECT-instructies zich alsof de optie VOOR BLADEREN wordt toegevoegd aan de instructies. Met de optie NO_BROWSETABLE worden echter niet de tijdelijke tabellen gemaakt die de optie VOOR BLADEREN doorgaans gebruikt om de resultaten naar uw toepassing te verzenden.
Wanneer u toegang probeert te krijgen tot de gegevens uit SQL Server-tabellen in de bladermodus met behulp van een SELECT-query met een outer join-instructie en wanneer een unieke index is gedefinieerd in de tabel die zich aan de binnenzijde van een outer join-instructie bevindt, biedt de bladermodus geen ondersteuning voor de unieke index. De bladermodus ondersteunt alleen de unieke index wanneer alle kolommen met een unieke indexsleutel NULL
waarden kunnen accepteren. De bladermodus biedt geen ondersteuning voor de unieke index als aan de volgende voorwaarden wordt voldaan:
U probeert toegang te krijgen tot de gegevens uit SQL Server-tabellen in de bladermodus met behulp van een SELECT-query met een outer join-instructie.
Er wordt een unieke index gedefinieerd in de tabel die zich aan de binnenkant van een outer join-instructie bevindt.
Volg deze stappen om dit gedrag in de bladermodus te reproduceren:
Maak in SQL Server Management Studio een database met de naam
SampleDB
.Maak in de
SampleDB
-database eentleft
tabel en eentright
tabel die beide één kolom met de naamc1
bevatten. Definieer een unieke index voor de kolomc1
in detleft
tabel en stel de kolom in omNULL
waarden te accepteren. Voer hiervoor de volgende Transact-SQL instructies uit in een geschikt queryvenster:CREATE TABLE tleft(c1 INT NULL UNIQUE) ; GO CREATE TABLE tright(c1 INT NULL) ; GO
Voeg verschillende waarden in de
tleft
tabel en detright
tabel in. Zorg ervoor dat u eenNULL
-waarde in detleft
tabel invoegt. Voer hiervoor de volgende Transact-SQL instructies uit in het queryvenster: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
Schakel de optie
NO_BROWSETABLE
in. Voer hiervoor de volgende Transact-SQL instructies uit in het queryvenster:SET NO_BROWSETABLE ON ; GO
Open de gegevens in de
tleft
tabel en detright
tabel met behulp van een outer join-instructie in deSELECT
-query. Zorg ervoor dat detleft
tabel zich aan de binnenkant van de outer join-instructie bevindt. Voer hiervoor de volgende Transact-SQL instructies uit in het queryvenster:SELECT tleft.c1 FROM tleft RIGHT JOIN tright ON tleft.c1 = tright.c1 WHERE tright.c1 <> 2 ;
Let op de volgende uitvoer in het deelvenster Resultaten:
c1 --- NULL NULL
Nadat u de SELECT
-query hebt uitgevoerd om toegang te krijgen tot de tabellen in de bladermodus, bevat de resultatenset van de SELECT
query twee NULL
waarden voor de kolom c1
in de tleft
tabel vanwege de definitie van de right outer join-instructie. Daarom kunt u in de resultatenset geen onderscheid maken tussen de NULL
waarden die afkomstig zijn uit de tabel en de NULL
waarden die door de right outer join-instructie zijn geïntroduceerd. Mogelijk ontvangt u onjuiste resultaten als u de NULL
waarden uit de resultatenset moet negeren.
Notitie
Als de kolommen die zijn opgenomen in de unieke index geen NULL
waarden accepteren, worden alle NULL
waarden in de resultatenset geïntroduceerd door de right outer join-instructie.
FOR XML
XML
Hiermee geeft u op dat de resultaten van een query moeten worden geretourneerd als een XML-document. Een van de volgende XML-modi moet worden opgegeven: RAW
, AUTO
, EXPLICIT
. Zie FOR XML (SQL Server)voor meer informatie over XML-gegevens en SQL Server.
RAW [ ('ElementName') ]
Neemt het queryresultaat en transformeert elke rij in de resultatenset in een XML-element met een algemene id <row />
als elementtag. U kunt desgewenst een naam opgeven voor het rijelement. De resulterende XML-uitvoer gebruikt de opgegeven ElementName
als het rijelement dat voor elke rij wordt gegenereerd. Zie RAW-modus gebruiken met FOR XML-voor meer informatie.
AUTO
Retourneert queryresultaten in een eenvoudige, geneste XML-structuur. Elke tabel in de FROM
-component, waarvoor ten minste één kolom wordt vermeld in de SELECT
component, wordt weergegeven als een XML-element. De kolommen in de component SELECT
worden toegewezen aan de juiste elementkenmerken. Zie Auto-modus gebruiken met FOR XML-voor meer informatie.
UITDRUKKELIJK
Hiermee geeft u op dat de vorm van de resulterende XML-structuur expliciet wordt gedefinieerd. Met deze modus moeten query's op een bepaalde manier worden geschreven, zodat aanvullende informatie over het gewenste nesten expliciet wordt opgegeven. Zie EXPLICIETe modus gebruiken met FOR XML-voor meer informatie.
XMLDATA
Retourneert een inline XDR-schema, maar voegt het hoofdelement niet toe aan het resultaat. Als XMLDATA
is opgegeven, wordt het XDR-schema toegevoegd aan het document.
Belangrijk
De XMLDATA
richtlijn is afgeschaft. Gebruik XSD-generatie in het geval van RAW- en AUTO-modi. Er is geen vervanging voor de XMLDATA
richtlijn in EXPLICIT
modus. Deze functie wordt verwijderd in een toekomstige versie van SQL Server. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van deze functie.
Ongewenste regeleinden onderdrukken: U kunt SQL Server Management Studio (SSMS) gebruiken om een query uit te voeren die gebruikmaakt van de FOR XML
-component. Soms wordt een grote hoeveelheid XML geretourneerd en weergegeven in één rastercel. De XML-tekenreeks kan langer zijn dan één SSMS-rastercel kan één regel bevatten. In dergelijke gevallen kan SSMS regeleindetekens invoegen tussen lange segmenten van de hele XML-tekenreeks. Dergelijke regeleinden kunnen zich voordoen in het midden van een subtekenreeks die niet over lijnen mag worden gesplitst. U kunt de regeleinden voorkomen met behulp van een cast-AS XMLDATA
. Deze oplossing kan ook van toepassing zijn wanneer u FOR JSON PATH
gebruikt, zoals in de volgende Transact-SQL voorbeeldinstructie SELECT
:
SELECT CAST(
(SELECT column1, column2
FROM my_table
FOR XML PATH('')
)
AS VARCHAR(MAX)
) AS XMLDATA ;
XMLSCHEMA [ ('TargetNameSpaceURI') ]
Retourneert een inline XSD-schema. U kunt desgewenst een doelnaamruimte-URI opgeven wanneer u deze instructie opgeeft, die de opgegeven naamruimte in het schema retourneert. Zie Een inline XSD-schema genererenvoor meer informatie.
ELEMENTEN
Hiermee geeft u op dat de kolommen worden geretourneerd als subelementen. Anders worden ze toegewezen aan XML-kenmerken. Deze optie wordt alleen ondersteund in de modi RAW
, AUTO
en PATH
. Zie RAW-modus gebruiken met FOR XML-voor meer informatie.
XSINIL
Hiermee geeft u op dat een element met xsi:nil
kenmerk is ingesteld op True worden gemaakt voor NULL
kolomwaarden. Deze optie kan alleen worden opgegeven met ELEMENTS
instructie. Zie voor meer informatie:
AFWEZIG
Geeft aan dat voor NULL
kolomwaarden overeenkomende XML-elementen niet worden toegevoegd aan het XML-resultaat. Geef deze optie alleen op met ELEMENTS.
PATH [ ('ElementName') ]
Hiermee wordt een <row>
element wrapper gegenereerd voor elke rij in de resultatenset. U kunt desgewenst een elementnaam opgeven voor de <row>
element-wrapper. Als er een lege tekenreeks wordt opgegeven, zoals FOR XML PATH ('') )
, wordt er geen wrapper-element gegenereerd. Het gebruik van PATH
biedt mogelijk een eenvoudiger alternatief voor query's die zijn geschreven met behulp van de EXPLICIT
-instructie. Zie PATH-modus gebruiken met FOR XML-voor meer informatie.
BINAIR BASE64
Hiermee geeft u op dat de query de binaire gegevens retourneert in binaire base64-gecodeerde indeling. Wanneer u binaire gegevens ophaalt met behulp van RAW
- en EXPLICIT
modus, moet deze optie worden opgegeven. Dit is de standaardinstelling in AUTO
modus.
TYPE
Hiermee geeft u op dat de query resultaten retourneert als xml- type. Zie TYPE-instructie in FOR XML-query'svoor meer informatie.
ROOT [ ('RootName') ]
Hiermee geeft u op dat één element op het hoogste niveau moet worden toegevoegd aan de resulterende XML. U kunt desgewenst de naam van het hoofdelement opgeven dat moet worden gegenereerd. Als de optionele hoofdnaam niet is opgegeven, wordt het standaardelement <root>
toegevoegd.
Zie FOR XML (SQL Server)voor meer informatie.
Voorbeeld
In het volgende voorbeeld wordt FOR XML AUTO
opgegeven met de opties TYPE
en XMLSCHEMA
. Vanwege de optie TYPE
wordt de resultatenset als een xml--type aan de client geretourneerd. De XMLSCHEMA
optie geeft aan dat het inline XSD-schema is opgenomen in de XML-gegevens die worden geretourneerd, en de optie ELEMENTS
geeft aan dat het XML-resultaat elementgericht is.
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;
VOOR JSON
Opmerkingen
In Fabric Data Warehouse moet FOR JSON
de laatste operator in de query zijn en is dit dus niet toegestaan binnen subquery's.
JSON
Geef FOR JSON op om de resultaten te retourneren van een query die is opgemaakt als JSON-tekst. U moet ook een van de volgende JSON-modi opgeven: AUTO of PATH. Zie Queryresultaten opmaken als JSON met FOR JSON (SQL Server)voor meer informatie over de component FOR JSON
.
AUTO
Maak de JSON-uitvoer automatisch op op basis van de structuur van de SELECT
-instructie door FOR JSON AUTO
op te geven. Zie JSON-uitvoer automatisch opmaken met DE AUTO-modus (SQL Server)voor meer informatie en voorbeelden.
PAD
Krijg volledige controle over de indeling van de JSON-uitvoer door FOR JSON PATH
op te geven.
PATH
modus kunt u wrapperobjecten maken en complexe eigenschappen nesten. Zie Geneste JSON-uitvoer opmaken met PATH-modus (SQL Server)voor meer informatie en voorbeelden.
INCLUDE_NULL_VALUES
Neem NULL
waarden op in de JSON-uitvoer door de optie INCLUDE_NULL_VALUES
op te geven met de FOR JSON
component. Als u deze optie niet opgeeft, bevat de uitvoer geen JSON-eigenschappen voor NULL
waarden in de queryresultaten. Zie Null-waarden opnemen in JSON-uitvoer met de INCLUDE_NULL_VALUES Option (SQL Server)voor meer informatie en voorbeelden.
ROOT [ ('RootName') ]
Voeg één element op het hoogste niveau toe aan de JSON-uitvoer door de optie ROOT
op te geven met de FOR JSON
component. Als u de optie ROOT
niet opgeeft, heeft de JSON-uitvoer geen hoofdelement. Zie Een hoofdknooppunt toevoegen aan JSON-uitvoer met derootoptie (SQL Server) voor meer informatie en voorbeelden.
WITHOUT_ARRAY_WRAPPER
Verwijder de vierkante haken die de JSON-uitvoer standaard omsluiten door de optie WITHOUT_ARRAY_WRAPPER
op te geven met de FOR JSON
-component. Als u deze optie niet opgeeft, wordt de JSON-uitvoer tussen vierkante haken geplaatst. Gebruik de optie WITHOUT_ARRAY_WRAPPER
om één JSON-object als uitvoer te genereren. Zie Vierkante haken verwijderen uit JSON-uitvoer met de WITHOUT_ARRAY_WRAPPER Option (SQL Server)voor meer informatie.
Zie Queryresultaten opmaken als JSON met FOR JSON (SQL Server)voor meer informatie.
Verwante inhoud
- SELECT (Transact-SQL)
- GEBRUIKEN VOOR JSON-uitvoer in SQL Server en in client-apps