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

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

  • Adja meg FOR BROWSE , hogy engedélyezi-e a frissítéseket a lekérdezés eredményeinek megtekintése közben a tallózási módban lévő kurzorban.
  • Adja meg FOR XML , hogy a lekérdezési eredmények XML formátumban formázva legyen.
  • Adja meg FOR JSON a lekérdezési eredmények JSON-ként való formázását.

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. Az alkalmazások tábláiban böngészhet, ha a tábla időbélyegoszlopot tartalmaz, a tábla egyedi indexet tartalmaz, és a FOR BROWSE beállítás az SQL Server egy példányának küldött utasítások végén SELECT található.

Note

A beállítást tartalmazó FOR BROWSE utasításban SELECT nem használható<lock_hint> HOLDLOCK.

FOR BROWSEnem jelenhet meg az UNION operátor által összekapcsolt utasításokbanSELECT.

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ó, a tallózási mód nem támogatja az indexet.

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 SELECT SQL Server-tábla adatainak eléréséhez használt utasításnak kulcsszavakkal FOR BROWSEkell végződnie. Amikor bekapcsolja a FOR BROWSE tallózási mód használatát, ideiglenes táblák jönnek létre.

  • A tallózási mód bekapcsolásához a következő Transact-SQL utasítást kell futtatnia a NO_BROWSETABLE beállítással:

    SET NO_BROWSETABLE ON;
    

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

Ha egy utasítást tartalmazó OUTER JOIN lekérdezéssel SELECT próbál hozzáférni az SQL Server-táblák adataihoz, és az utasítás belső oldalán OUTER JOIN 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 elfogad 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ák adatait tallózási módban próbálhatja meg elérni egy SELECT utasítást OUTER JOIN tartalmazó lekérdezéssel.

  • Az utasítás belső oldalán OUTER JOIN 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 adatbázist SampleDB.

  2. SampleDB Az adatbázisban hozzon létre egy táblát tleft és egy tábláttright, amely mindkettő egyetlen, elnevezett c1oszlopot 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);
    
  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;
    
  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 OUTER 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 lekérdezést SELECT 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 c1tleft tábla oszlopához az utasítás definíciója RIGHT OUTER JOIN miatt. Ezért az eredményhalmazban nem lehet különbséget tenni a NULL táblából származó értékek és az NULLRIGHT OUTER JOIN utasítás által bevezetett értékek között. Helytelen eredményeket kaphat, ha a lekérdezésnek figyelmen kívül kell hagynia az NULL eredményhalmaz értékeit.

Note

Ha az egyedi indexben szereplő oszlopok nem fogadnak el NULL értékeket, az NULL eredményhalmaz összes értékét az RIGHT OUTER JOIN utasítás 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ó: A RAW mód használata AZ XML-fájllal.

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 AZ XML-fájllal.

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 lekérdezéseket kell írnia, hogy explicit módon további információkat adjanak meg a kívánt beágyazásról. További információ: Explicit mód használata AZ XML-hez.

XMLDATA

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

Important

Az XMLDATA irányelv elavult. Használja az XSD-generációt és AUTO a RAW módokat. A módban lévő irányelv EXPLICIT nem helyettesít.XMLDATA 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 mellőzése: Az SQL Server Management Studio (SSMS) használatával futtathat egy, a záradékot használó lekérdezést FOR XML . 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 szétosztani a sorok között. 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 lekérdezés XML-attribútumokhoz rendeli őket. Ez a beállítás csak a RAW, AUTOés PATH a módok esetén támogatott. További információ: A RAW mód használata AZ XML-fájllal.

XSINIL

Azt adja meg, hogy az oszlopértékekhez létrejön NULL egy Igaz attribútummal rendelkező xsi:nil elem. Ezt a beállítást csak az ELEMENTS irányelvvel adhatja meg. További információ:

ABSENT

Azt jelzi, hogy az oszlopértékek esetében NULL a megfelelő XML-elemek nem lesznek hozzáadva az XML-eredményhez. Ezt a beállítást csak a beállítással ELEMENTSadhatja 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 sztringet ad meg, például FOR XML PATH (''))egy burkolóelemet nem hoz 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ó: A PATH mód használata AZ XML-fájllal.

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 a használatával RAW és EXPLICIT módjával, meg kell adnia ezt a beállítást. Ez a beállítás az alapértelmezett mód AUTO .

TYPE

Megadja, hogy a lekérdezés xml- típusként adja vissza az eredményeket. További információ: TYPE direktíva AZ XML-lekérdezésekben.

ROOT [ ('RootName') ]

Megadja, hogy a rendszer egyetlen legfelső szintű elemet adjon hozzá az eredményül kapott XML-fájlhoz. Igény szerint megadhatja a létrehozandó gyökérelem nevét. Ha nem adja meg a gyökérnevet, a rendszer hozzáadja az alapértelmezett <root> elemet.

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

Example

Az alábbi példa FOR XML AUTO a TYPE és XMLSCHEMA beállításokkal. A beállítás miatt a TYPE lekérdezés az eredményhalmazt xml-típusként adja vissza 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 AdventureWorks2025;
SELECT p.BusinessEntityID,
       FirstName,
       LastName,
       PhoneNumber AS Phone
FROM Person.Person AS p
     INNER 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 a lekérdezésnek a következővel FOR JSONkell végződnie, így nem használhatja az al lekérdezésekben.

JSON

Adja meg, hogy egy JSON-szövegként formázott lekérdezés eredményeit adja vissza FOR JSON . A következő JSON-módok egyikét is meg kell adnia: AUTO vagy PATH. További információ a FOR JSON záradékról: Lekérdezési eredmények formázása JSON-ként a FOR JSON használatával.

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: A JSON-kimenet automatikus formázása AUTOMATIKUS módban.

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ókért és példákért lásd: Beágyazott JSON-kimenet formázása PATH módban.

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-ban – INCLUDE_NULL_VALUES beállítás.

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 ROOT beállítással.

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óért lásd: Szögletes zárójelek eltávolítása a JSON-ból – WITHOUT_ARRAY_WRAPPER opció.

További információ: Lekérdezési eredmények formázása JSON-ként a FOR JSON használatával.