Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance
Azure SQLKoncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Klauzule FOR slouží k určení jedné z následujících možností pro výsledky dotazu.
Povolte aktualizace při prohlížení výsledků dotazu v kurzoru v režimu procházení zadáním
FOR BROWSE.Formátování výsledků dotazu jako XML zadáním
FOR XML.Naformátujte výsledky dotazu jako JSON zadáním
FOR JSON.
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 ]
]
}
PRO PROHLÍŽENÍ
BROWSE
Určuje, že se aktualizace povolí při prohlížení dat v DB-Library kurzoru v režimu procházení. Tabulku je možné procházet v aplikaci, pokud tabulka obsahuje časové razítko sloupec, tabulka má jedinečný index a možnost FOR BROWSE je na konci příkazů SELECT odesílaných do instance SQL Serveru.
Note
V příkazu SELECT, který obsahuje možnost FOR BROWSE, nelze použít <lock_hint> HOLDLOCK.
Příkaz FOR BROWSE nelze zobrazit v příkazech SELECT, které jsou spojené operátorem UNION.
Note
Pokud jsou sloupce jedinečného klíče indexu tabulky s možnou hodnotou null a tabulka je na vnitřní straně vnějšího spojení, režim procházení nepodporuje index.
Režim procházení umožňuje prohledávat řádky v tabulce SQL Serveru a aktualizovat data v tabulce po jednom řádku. Pokud chcete získat přístup k tabulce SQL Serveru v aplikaci v režimu procházení, musíte použít jednu z následujících dvou možností:
Příkaz SELECT, který používáte pro přístup k datům z tabulky SQL Serveru, musí končit klíčovými slovy FOR BROWSE. Když zapnete možnost PRO PROCHÁZENÍ pro použití režimu procházení, vytvoří se dočasné tabulky.
Pokud chcete zapnout režim procházení pomocí možnosti NO_BROWSETABLE, musíte spustit následující příkaz Transact-SQL:
SET NO_BROWSETABLE ONKdyž zapnete možnost NO_BROWSETABLE, všechny příkazy SELECT se chovají stejně, jako by k příkazům byla připojena možnost FOR BROWSE. Možnost NO_BROWSETABLE však nevytvoří dočasné tabulky, které pro procházení obecně používá k odeslání výsledků do vaší aplikace.
Při pokusu o přístup k datům z tabulek SQL Serveru v režimu procházení pomocí dotazu SELECT, který zahrnuje příkaz vnější spojení, a když je v tabulce, která je přítomna na vnitřní straně příkazu vnějšího spojení, režim procházení nepodporuje jedinečný index. Režim procházení podporuje jedinečný index pouze v případech, kdy všechny sloupce s jedinečnými klíči indexu můžou přijímat NULL hodnoty. Režim procházení nepodporuje jedinečný index, pokud jsou splněny následující podmínky:
Pokusíte se získat přístup k datům z tabulek SQL Serveru v režimu procházení pomocí dotazu SELECT, který zahrnuje příkaz vnějšího spojení.
Jedinečný index je definován v tabulce, která se nachází na vnitřní straně příkazu vnějšího spojení.
Chcete-li toto chování reprodukovat v režimu procházení, postupujte takto:
V aplikaci SQL Server Management Studio vytvořte databázi s názvem
SampleDB.V databázi
SampleDBvytvořte tabulkutlefta tabulkutright, která obě obsahují jeden sloupec s názvemc1. Definujte jedinečný index pro sloupecc1v tabulcetlefta nastavte sloupec tak, aby přijímal hodnotyNULL. Uděláte to tak, že v příslušném okně dotazu spustíte následující příkazy Transact-SQL:CREATE TABLE tleft(c1 INT NULL UNIQUE) ; GO CREATE TABLE tright(c1 INT NULL) ; GODo tabulky
tlefta tabulkytrightvložte několik hodnot. Ujistěte se, že do tabulkyNULLvložíte hodnotutleft. Uděláte to tak, že v okně dotazu spustíte následující příkazy Transact-SQL: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) ; GOZapněte možnost
NO_BROWSETABLE. Uděláte to tak, že v okně dotazu spustíte následující příkazy Transact-SQL:SET NO_BROWSETABLE ON ; GOPřístup k datům v tabulce
tlefta tabulcetrightpomocí příkazu vnějšího spojení v dotazuSELECT. Ujistěte se, že jetlefttabulka na vnitřní straně příkazu vnějšího spojení. Uděláte to tak, že v okně dotazu spustíte následující příkazy Transact-SQL:SELECT tleft.c1 FROM tleft RIGHT JOIN tright ON tleft.c1 = tright.c1 WHERE tright.c1 <> 2 ;Všimněte si následujícího výstupu v podokně výsledky:
c1 --- NULL NULL
Po spuštění dotazu SELECT pro přístup k tabulkám v režimu procházení obsahuje sada výsledků dotazu SELECT dvě NULL hodnoty pro sloupec c1 v tabulce tleft z důvodu definice pravého příkazu vnějšího spojení. Proto v sadě výsledků nelze rozlišovat mezi NULL hodnotami, které pocházejí z tabulky, a NULL hodnoty, které zavedl příkaz pravé vnější spojení. Pokud je nutné ignorovat hodnoty NULL ze sady výsledků, může se zobrazit nesprávné výsledky.
Note
Pokud sloupce zahrnuté do jedinečného indexu nepřijímají NULL hodnoty, byly všechny NULL hodnoty v sadě výsledků zavedeny příkazem pravého vnějšího spojení.
FOR XML (příkaz používaný pro generování výstupu ve formátu XML)
jazyk XML
Určuje, že výsledky dotazu mají být vráceny jako dokument XML. Je třeba zadat jeden z následujících režimů XML: RAW, AUTO, EXPLICIT. Další informace o datech XML a SQL Serveru naleznete v tématu FOR XML (SQL Server).
RAW [ ('ElementName') ]
Vezme výsledek dotazu a transformuje každý řádek v sadě výsledků do elementu XML s obecným identifikátorem <row /> jako značku elementu. Volitelně můžete zadat název prvku řádku. Výsledný výstup XML používá zadaný ElementName jako prvek řádku vygenerovaný pro každý řádek. Další informace naleznete v tématu Použití REŽIMU RAW sFOR XML .
AUTO
Vrátí výsledky dotazu v jednoduchém vnořeném stromu XML. Každá tabulka v klauzuli FROM, pro kterou je v klauzuli SELECT uveden alespoň jeden sloupec, je reprezentována jako element XML. Sloupce uvedené v klauzuli SELECT jsou mapovány na příslušné atributy elementu. Další informace najdete v tématu Použití automatického režimu sXML .
EXPLICIT
Určuje, že tvar výsledného stromu XML je definován explicitně. Pomocí tohoto režimu musí být dotazy zapsány určitým způsobem, aby byly explicitně zadány další informace o požadovaném vnoření. Další informace naleznete v tématu Použití explicitního režimu sFOR XML .
XMLDATA
Vrátí vložené schéma XDR, ale nepřidá kořenový prvek do výsledku. Pokud je zadán XMLDATA, připojí se k dokumentu schéma XDR.
Important
Direktiva XMLDATA je zastaralé. Generování XSD použijte v případě režimů RAW a AUTO. Direktiva XMLDATA v režimu EXPLICIT neexistuje. Tato funkce bude odebrána v budoucí verzi SQL Serveru. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají.
Potlačení nežádoucích konců řádků: Sql Server Management Studio (SSMS) můžete použít k vydání dotazu, který používá klauzuli FOR XML. Někdy se vrátí velké množství XML a zobrazí se v jedné buňce mřížky. Řetězec XML může být delší než jedna buňka mřížky SSMS, která může obsahovat jeden řádek. V těchto případech může SSMS vložit znaky zalomení řádku mezi dlouhé segmenty celého řetězce XML. Tyto konce řádků mohou nastat uprostřed podřetětěce, které by neměly být rozděleny mezi čáry. Konce řádků můžete zabránit použitím AS XMLDATApřetypování . Toto řešení se také může použít při použití FOR JSON PATH, jako v následujícím ukázkovém příkazu Transact-SQL SELECT:
SELECT CAST(
(SELECT column1, column2
FROM my_table
FOR XML PATH('')
)
AS VARCHAR(MAX)
) AS XMLDATA ;
XMLSCHEMA [ ('TargetNameSpaceURI') ]
Vrátí vložené schéma XSD. Pokud zadáte tuto direktivu, můžete volitelně zadat identifikátor URI cílového oboru názvů, který vrátí zadaný obor názvů ve schématu. Další informace naleznete v tématu vygenerování vloženého schématu XSD.
ELEMENTS
Určuje, že sloupce se vrátí jako dílčí prvky. Jinak se mapují na atributy XML. Tato možnost je podporována pouze v režimech RAW, AUTO a PATH. Další informace naleznete v tématu Použití REŽIMU RAW sFOR XML .
XSINIL
Určuje, že prvek s atributem xsi:nil nastaveným na hodnotu True pro hodnoty sloupce NULL. Tuto možnost lze zadat pouze pomocí direktivy ELEMENTS. Další informace najdete tady:
ABSENT
Označuje, že pro NULL hodnoty sloupce, odpovídající elementy XML nebudou přidány ve výsledku XML. Tuto možnost zadejte pouze pomocí elementů.
PATH [ ('ElementName') ]
Vygeneruje obálku elementu <row> pro každý řádek v sadě výsledků. Volitelně můžete zadat název elementu pro obálku elementu <row>. Pokud je k dispozici prázdný řetězec, například FOR XML PATH ('') ), element obálky není generován. Použití PATH může poskytnout jednodušší alternativu k dotazům napsaným pomocí direktivy EXPLICIT. Další informace najdete v tématu Použití režimu PATH sXML .
BINARY BASE64
Určuje, že dotaz vrátí binární data v binárním formátu kódování base64. Při načítání binárních dat pomocí RAW a režimu EXPLICIT musí být tato možnost zadána. Toto je výchozí nastavení v režimu AUTO.
TYPE
Určuje, že dotaz vrátí výsledky jako xml typ. Další informace naleznete v tématu TYPE Direktiva v dotazech FOR XML.
ROOT [ ('RootName') ]
Určuje, že do výsledného XML se přidá jeden element nejvyšší úrovně. Volitelně můžete zadat název kořenového elementu, který se má vygenerovat. Pokud není zadán volitelný kořenový název, přidá se výchozí prvek <root>.
Další informace najdete v tématu FOR XML (SQL Server).
Example
Následující příklad určuje FOR XML AUTO s možnostmi TYPE a XMLSCHEMA. Z důvodu TYPE možnosti se sada výsledků vrátí klientovi jako typ xml. Možnost XMLSCHEMA určuje, že vložené schéma XSD je součástí vrácených dat XML a ELEMENTS možnost určuje, že výsledek XML je orientovaný na element.
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;
PRO JSON
Remarks
V datovém skladu fabric musí být FOR JSON posledním operátorem v dotazu, takže v poddotazech není povolený.
JSON
Zadáním příkazu FOR JSON vrátíte výsledky dotazu formátovaného jako text JSON. Musíte také zadat jeden z následujících režimů JSON: AUTO nebo PATH. Další informace o klauzuli FOR JSON najdete v tématu Formát výsledků dotazu jako JSON sFOR JSON (SQL Server).
AUTO
Naformátujte výstup JSON automaticky na základě struktury příkazu SELECT zadáním FOR JSON AUTO. Další informace a příklady najdete v tématu Automatické formátování výstupu JSON pomocí automatického režimu (SQL Server).
PATH
Získejte úplnou kontrolu nad formátem výstupu JSON zadáním FOR JSON PATH. režim PATH umožňuje vytvářet objekty obálky a vnořit složité vlastnosti. Další informace a příklady najdete v tématu Formátování vnořeného výstupu JSON pomocí režimu PATH (SQL Server).
INCLUDE_NULL_VALUES
Do výstupu JSON zahrňte NULL hodnoty zadáním možnosti INCLUDE_NULL_VALUES pomocí klauzule FOR JSON. Pokud tuto možnost nezadáte, výstup neobsahuje vlastnosti JSON pro NULL hodnoty ve výsledcích dotazu. Další informace a příklady najdete v tématu Zahrnout hodnoty Null ve výstupu JSON smožnost INCLUDE_NULL_VALUES (SQL Server).
ROOT [ ('RootName') ]
Do výstupu JSON přidejte jeden element nejvyšší úrovně zadáním možnosti ROOT s klauzulí FOR JSON. Pokud nezadáte možnost ROOT, výstup JSON nemá kořenový prvek. Další informace a příklady najdete v tématu Přidání kořenového uzlu do výstupu JSON pomocíROOT Option (SQL Server).
WITHOUT_ARRAY_WRAPPER
Ve výchozím nastavení odeberte hranaté závorky obklopující výstup JSON zadáním možnosti WITHOUT_ARRAY_WRAPPER pomocí klauzule FOR JSON. Pokud tuto možnost nezadáte, výstup JSON se uzavře do hranatých závorek. K vygenerování jednoho objektu JSON jako výstupu použijte možnost WITHOUT_ARRAY_WRAPPER. Další informace najdete v tématu Odebrání hranatých závorek z výstupu JSON pomocíWITHOUT_ARRAY_WRAPPER Option (SQL Server).
Další informace najdete v tématu Formátování výsledků dotazu ve formátu JSON sFOR JSON (SQL Server).
Související obsah
- SELECT (Transact-SQL)
- Použití výstupu FOR JSON na SQL Serveru a v klientských aplikacích