Megosztás a következőn keresztül:


SELECT – FOR záradék (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

A FOR záradék használatával adja meg a lekérdezési eredmények alábbi beállításainak egyikét.

  • Az FOR BROWSEmegadásával engedélyezheti a frissítéseket a lekérdezési eredmények böngészési módban történő megjelenítésekor.

  • A lekérdezési eredmények formázása XML-fájlként a FOR XMLmegadásával.

  • A lekérdezési eredmények formázása JSON-ként a FOR JSONmegadásával.

Transact-SQL szintaxis konvenciói

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 ]  
    ]  

}

BÖNGÉSZÉSHEZ

BROWSE

Megadja, hogy a frissítések engedélyezve legyenek az adatok DB-Library tallózási módú kurzorban való megtekintésekor. Ha a tábla időbélyeget oszlopot tartalmaz, a tábla egyedi indexet tartalmaz, a FOR BROWSE beállítás pedig az SQL Server egy példányának küldött SELECT utasítások végén található.

Note

A <LOCK_HINT> HOLDLOCK nem használható a TALLÓZÁS LEHETŐSÉGET tartalmazó SELECT utasításban.

A FOR BROWSE nem jelenik meg az UNION operátor által csatlakoztatott SELECT utasításokban.

Note

Ha egy tábla egyedi indexkulcsoszlopai null értékűek, és a tábla egy külső illesztés belső oldalán található, az indexet nem támogatja a tallózási mód.

A tallózási mód lehetővé teszi az SQL Server-tábla sorainak vizsgálatát és a tábla adatainak frissítését egyszerre egy sorban. Ha tallózási módban szeretne hozzáférni egy SQL Server-táblához az alkalmazásban, az alábbi két lehetőség egyikét kell használnia:

  • Az SQL Server-tábla adatainak eléréséhez használt SELECT utasításnak a BROWSE kulcsszavakkal kell végződnie. Ha bekapcsolja a TALLÓZÁS beállítást a tallózási mód használatához, ideiglenes táblák jönnek létre.

  • A tallózási mód bekapcsolásához az alábbi Transact-SQL utasítást kell futtatnia a NO_BROWSETABLE beállítással:

    SET NO_BROWSETABLE ON  
    

    A NO_BROWSETABLE beállítás bekapcsolásakor az összes SELECT utasítás úgy viselkedik, mintha a FOR BROWSE beállítás hozzá van fűzve az utasításokhoz. A NO_BROWSETABLE beállítás azonban nem hozza létre azokat az ideiglenes táblákat, amelyeket az FOR BROWSE beállítás általában az eredmények alkalmazásba való küldéséhez használ.

Ha tallózási módban próbál hozzáférni az SQL Server-táblák adataihoz egy külső illesztési utasítást tartalmazó SELECT lekérdezéssel, és ha a külső illesztési utasítás belső oldalán található táblában egyedi index van meghatározva, a tallózási mód nem támogatja az egyedi indexet. A tallózási mód csak akkor támogatja az egyedi indexet, ha az összes egyedi indexkulcs-oszlop képes elfogadni NULL értékeket. A tallózási mód nem támogatja az egyedi indexet, ha az alábbi feltételek teljesülnek:

  • Az SQL Server-táblákból tallózó módban próbál hozzáférni az adatokhoz egy külső illesztési utasítást tartalmazó SELECT lekérdezéssel.

  • A külső illesztés utasításának belső oldalán található táblában egyedi index van definiálva.

Ennek a viselkedésnek a tallózási módban való reprodukálásához kövesse az alábbi lépéseket:

  1. Az SQL Server Management Studióban hozzon létre egy SampleDBnevű adatbázist.

  2. Az SampleDB adatbázisban hozzon létre egy tleft táblát és egy tright táblát, amely egy c1nevű oszlopot tartalmaz. Adjon meg egy egyedi indexet a c1 tábla tleft oszlopában, és állítsa be az oszlopot NULL értékek elfogadására. Ehhez futtassa a következő Transact-SQL utasításokat egy megfelelő lekérdezési ablakban:

    CREATE TABLE tleft(c1 INT NULL UNIQUE) ;  
    GO   
    CREATE TABLE tright(c1 INT NULL) ;  
    GO  
    
  3. Szúrjon be több értéket a tleft táblába és a tright táblába. Ügyeljen arra, hogy NULL értéket szúrjon be a tleft táblába. Ehhez futtassa a következő Transact-SQL utasításokat a lekérdezési ablakban:

    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  
    
  4. Kapcsolja be a NO_BROWSETABLE beállítást. Ehhez futtassa a következő Transact-SQL utasításokat a lekérdezési ablakban:

    SET NO_BROWSETABLE ON ;  
    GO  
    
  5. A tleft táblában és a tright táblában lévő adatokat egy külső illesztési utasítással érheti el a SELECT lekérdezésben. Győződjön meg arról, hogy a tleft tábla a külső illesztés utasításának belső oldalán található. Ehhez futtassa a következő Transact-SQL utasításokat a lekérdezési ablakban:

    SELECT tleft.c1   
    FROM tleft   
    RIGHT JOIN tright   
    ON tleft.c1 = tright.c1   
    WHERE tright.c1 <> 2 ;
    

    Figyelje meg a következő kimenetet az Eredmények panelen:

    c1  
    ---
    NULL  
    NULL  
    

Miután futtatta a SELECT lekérdezést a táblák tallózási módban való eléréséhez, a SELECT lekérdezés eredményhalmaza két NULL értéket tartalmaz a c1 tábla tleft oszlopához a jobb oldali külső illesztés utasítás definíciója miatt. Ezért az eredményhalmazban nem lehet különbséget tenni a táblázatból származó NULL értékek és a jobb oldali külső illesztés utasítás által bevezetett NULL értékek között. Helytelen eredményeket kaphat, ha figyelmen kívül kell hagynia az eredményhalmaz NULL értékeit.

Note

Ha az egyedi indexben szereplő oszlopok nem fogadnak el NULL értékeket, az eredményhalmaz összes NULL értékét a jobb oldali külső illesztés utasítása vezette be.

XML-hez

XML

Megadja, hogy a lekérdezés eredményeit XML-dokumentumként kell visszaadni. A következő XML-módok egyikét kell megadni: RAW, AUTO, EXPLICIT. További információ az XML-adatokról és az SQL Serverről: FOR XML (SQL Server).

RAW [ ('ElemNév') ]

Felveszi a lekérdezés eredményét, és az eredményhalmaz minden sorát XML-elemgé alakítja, amely általános azonosítót <row /> elemcímkeként. Megadhat egy nevet a sorelemnek. Az eredményként kapott XML-kimenet a megadott ElementName használja az egyes sorokhoz létrehozott sorelemként. További információ: RAW mód használata a FOR XML.

AUTO

A lekérdezési eredményeket egy egyszerű, beágyazott XML-fában adja vissza. A FROM záradék minden táblája, amelynek legalább egy oszlopa szerepel a SELECT záradékban, XML-elemként jelenik meg. A SELECT záradékban felsorolt oszlopok a megfelelő elemattribútumokra vannak leképezve. További információ: Automatikus mód használata a FOR XML.

EXPLICIT

Megadja, hogy az eredményül kapott XML-fa alakja explicit módon legyen definiálva. Ennek a módnak a használatával a lekérdezéseket meghatározott módon kell megírni, hogy a kívánt beágyazással kapcsolatos további információk explicit módon legyenek megadva. További információ: EXPLICIT mód használata AZ XML-.

XMLDATA

Beágyazott XDR-sémát ad vissza, de nem adja hozzá a gyökérelemet az eredményhez. Ha XMLDATA van megadva, az XDR-séma hozzá lesz fűzve a dokumentumhoz.

Important

A XMLDATA irányelv elavult. Használjon XSD-generációt a RAW és az AUTO mód esetén. A XMLDATA irányelv EXPLICIT módban nem helyettesít. Ez a funkció az SQL Server egy későbbi verziójában lesz eltávolítva. Ne használja ezt a funkciót az új fejlesztési munkában, és tervezze meg a funkciót jelenleg használó alkalmazások módosítását.

A nem kívánt sortörések letiltása: Az SQL Server Management Studio (SSMS) használatával kiadhat egy lekérdezést, amely a FOR XML záradékot használja. Néha nagy mennyiségű XML jelenik meg és jelenik meg egy rácscellában. Az XML-sztring hosszabb lehet, mint egy SSMS-rácscella egyetlen sorban. Ezekben az esetekben az SSMS sortörési karaktereket szúrhat be a teljes XML-sztring hosszú szegmensei közé. Ilyen sortörések előfordulhatnak egy olyan részszúrás közepén, amelyet nem szabad a sorok között felosztani. Az öntött AS XMLDATAhasználatával megakadályozhatja a sortöréseket. Ez a megoldás a FOR JSON PATHhasználatakor is alkalmazható, ahogyan az alábbi Transact-SQL minta SELECT utasításban is szerepel:

SELECT CAST(
    (SELECT column1, column2
        FROM my_table
        FOR XML PATH('')
    )
        AS VARCHAR(MAX)
) AS XMLDATA ;

XMLSCHEMA [ ('TargetNameSpaceURI' ) ]

Beágyazott XSD-sémát ad vissza. Az irányelv megadásakor megadhatja a célnévtér URI-ját, amely a séma megadott névterét adja vissza. További információ: Beágyazott XSD-séma létrehozása.

ELEMENTS

Megadja, hogy az oszlopok alelemekként legyenek visszaadva. Ellenkező esetben a rendszer XML-attribútumokra van leképezve. Ez a beállítás csak RAW, AUTO és PATH módokban támogatott. További információ: RAW mód használata a FOR XML.

XSINIL

Megadja, hogy xsi:nil oszlopértékekhez attribútummal rendelkező elem NULL legyen létrehozva. Ez a beállítás csak ELEMENTS irányelvvel adható meg. További információ:

ABSENT

Azt jelzi, hogy NULL oszlopértékek esetében a megfelelő XML-elemek nem lesznek hozzáadva az XML-eredményhez. Ezt a beállítást csak az ELEMENTS elemekkel adja meg.

PATH [ ('ElemNév') ]

Létrehoz egy <row> elemburkolót az eredményhalmaz minden sorához. Igény szerint megadhatja a <row> elemburkoló elemnevét. Ha üres sztring van megadva, például FOR XML PATH ('') ), a burkolóelem nem jön létre. A PATH használata egyszerűbb alternatívát kínálhat a EXPLICIT irányelvvel írt lekérdezések helyett. További információ: PATH mód használata AZ XML-.

BINÁRIS BASE64

Megadja, hogy a lekérdezés bináris alap64 kódolású formátumban adja vissza a bináris adatokat. Ha bináris adatokat kér le RAW és EXPLICIT módban, ezt a beállítást meg kell adni. Ez az alapértelmezett AUTO módban.

TYPE

Megadja, hogy a lekérdezés xml- típusként adja vissza az eredményeket. További információ: TÍPUS irányelv az XML-lekérdezések.

ROOT [ ('RootName') ]

Megadja, hogy egyetlen legfelső szintű elem legyen hozzáadva az eredményül kapott XML-hez. Igény szerint megadhatja a létrehozandó gyökérelem nevét. Ha a választható gyökérnév nincs megadva, a rendszer hozzáadja az alapértelmezett <root> elemet.

További információ: FOR XML (SQL Server).

Example

Az alábbi példa FOR XML AUTO a TYPE és XMLSCHEMA beállításokkal. A TYPE beállítás miatt az eredményhalmaz xml- típusként lesz visszaadva az ügyfélnek. A XMLSCHEMA beállítás azt határozza meg, hogy a beágyazott XSD-séma szerepel-e a visszaadott XML-adatokban, a ELEMENTS beállítás pedig azt határozza meg, hogy az XML-eredmény elemközpontú.

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;  

JSON-hoz

Remarks

A Fabric Data Warehouse-ban FOR JSON kell lennie a lekérdezés utolsó operátorának, ezért nem engedélyezett az al lekérdezésekben.

JSON

Adja meg a FOR JSON értéket egy JSON-szövegként formázott lekérdezés eredményeinek visszaadásához. Az alábbi JSON-módok egyikét is meg kell adnia: AUTO vagy PATH. A FOR JSON záradékról további információt a Lekérdezési eredmények formázása JSON-ként a FOR JSON (SQL Server)című cikkben talál.

AUTO

A JSON-kimenetet automatikusan formázza a SELECT utasítás struktúrája alapján a FOR JSON AUTOmegadásával. További információkért és példákért lásd: JSON-kimenet automatikus formázása automatikus móddal (SQL Server).

PATH

A JSON-kimenet formátumának teljes vezérlése FOR JSON PATHmegadásával. PATH mód lehetővé teszi burkolóobjektumok létrehozását és összetett tulajdonságok beágyazását. További információ és példák: Beágyazott JSON-kimenet formázása PATH móddal (SQL Server).

INCLUDE_NULL_VALUES

Adjon meg NULL értékeket a JSON-kimenetben a INCLUDE_NULL_VALUES beállítás megadásával a FOR JSON záradékkal. Ha nem adja meg ezt a beállítást, a kimenet nem tartalmazza NULL értékek JSON-tulajdonságait a lekérdezés eredményében. További információkért és példákért lásd: Null értékek belefoglalása a JSON-kimenetbe az INCLUDE_NULL_VALUES beállítással (SQL Server).

ROOT [ ('RootName') ]

Adjon hozzá egyetlen legfelső szintű elemet a JSON-kimenethez a ROOT beállítás megadásával a FOR JSON záradékkal. Ha nem adja meg a ROOT beállítást, a JSON-kimenetnek nincs gyökéreleme. További információkért és példákért lásd: Gyökércsomópont hozzáadása a JSON-kimenethez a GYÖKÉR beállítással (SQL Server).

WITHOUT_ARRAY_WRAPPER

A JSON-kimenetet alapértelmezés szerint körülvevő szögletes zárójelek eltávolításához adja meg a WITHOUT_ARRAY_WRAPPER beállítást a FOR JSON záradékkal. Ha nem adja meg ezt a beállítást, a JSON-kimenet szögletes zárójelek közé kerül. A WITHOUT_ARRAY_WRAPPER beállítással egyetlen JSON-objektumot hozhat létre kimenetként. További információ: Szögletes zárójelek eltávolítása a JSON-kimenetből az WITHOUT_ARRAY_WRAPPER beállítással (SQL Server).

További információ: Lekérdezési eredmények formázása JSON-ként a FOR JSON (SQL Server).