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.
- Určete
FOR BROWSE, že chcete povolit aktualizace při zobrazení výsledků dotazu v kurzoru v režimu procházení. - Zadejte
FOR XML, aby se výsledky dotazu formátují jako XML. - Zadejte
FOR JSON, aby se výsledky dotazu formátují jako 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 při prohlížení dat v DB-Library kurzoru v režimu procházení jsou povoleny aktualizace. Tabulku v aplikaci můžete procházet, pokud tabulka obsahuje sloupec časového razítka , tabulka má jedinečný index a možnost FOR BROWSE je na konci SELECT příkazů odesílaných do instance SQL Serveru.
Note
Příkaz, který obsahuje tuto FOR BROWSE možnost, nemůžete použít.<lock_hint> HOLDLOCKSELECT
FOR BROWSEv příkazech, které operátor spojí, UNION se nezobrazujeSELECT.
Note
Pokud jsou sloupce jedinečného indexového klíče tabulky s možnou hodnotou null a tabulka je na vnitřní straně vnějšího spojení, režim procházení index nepodporuje.
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žijete pro přístup k datům z tabulky SQL Serveru, musí končit klíčovými slovyFOR BROWSE. Když zapneteFOR BROWSEmožnost použití režimu procházení, vytvoří se dočasné tabulky.Pokud chcete zapnout režim procházení pomocí
NO_BROWSETABLEtéto možnosti, musíte spustit následující příkaz Transact-SQL:SET NO_BROWSETABLE ON;Když tuto možnost zapnete
NO_BROWSETABLE, všechnySELECTpříkazy se chovají, jako byFOR BROWSEse tato možnost připojila k příkazům. TatoNO_BROWSETABLEmožnost ale nevytvoří dočasné tabulky, kteréFOR BROWSEtato možnost obvykle používá k odeslání výsledků do vaší aplikace.
Když se pokusíte získat přístup k datům z tabulek SQL Serveru v režimu procházení pomocí SELECT dotazu, který zahrnuje OUTER JOIN příkaz, a když je v tabulce, která je na vnitřní straně OUTER JOIN příkazu, definovaný jedinečný index, 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í
SELECTdotazu, který zahrnujeOUTER JOINpříkaz.Jedinečný index je definován v tabulce, která se nachází na vnitřní straně
OUTER JOINpříkazu.
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.SampleDBV databázi vytvořtetlefttabulku atrighttabulku, 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);Zapně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;Pří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 OUTER 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í SELECT dotazu pro přístup k tabulkám v režimu procházení obsahuje sada SELECT výsledků dotazu dvě NULL hodnoty pro c1 sloupec v tleft tabulce kvůli definici RIGHT OUTER JOIN příkazu. Proto v sadě výsledků nemůžete rozlišovat mezi NULL hodnotami, které pocházejí z tabulky, a NULL hodnotami, které RIGHT OUTER JOIN příkaz zavedl. Pokud dotaz musí ignorovat NULL hodnoty ze sady výsledků, může se zobrazit nesprávné výsledky.
Note
Pokud sloupce, které jsou zahrnuty do jedinečného indexu, nepřijímají NULL hodnoty, byly NULL všechny hodnoty v sadě výsledků zavedeny příkazem RIGHT OUTER JOIN .
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 s jazykem FOR 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 naleznete v tématu Použití automatického režimu s jazykem XML.
EXPLICIT
Určuje, že tvar výsledného stromu XML je definován explicitně. V tomto režimu musíte zapsat dotazy určitým způsobem, aby explicitně zadaly další informace o požadovaném vnoření. Další informace naleznete v tématu Použití explicitního režimu s jazykem XML.
XMLDATA
Vrátí vložené schéma XDR, ale nepřidá do výsledku kořenový prvek. Pokud zadáte XMLDATA, připojí se k dokumentu schéma XDR.
Important
Direktiva XMLDATA je zastaralá. Používejte generování XSD pro RAW režimy a AUTO režimy. Direktiva XMLDATA v EXPLICIT režimu není nahrazena. 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ů: K spuštění dotazu, který používá FOR XML klauzuli, můžete použít SQL Server Management Studio (SSMS). 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. Takové konce řádků můžou nastat uprostřed podřetětědce, které by neměly být rozdělené mezi řádky. 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 Generování vloženého schématu XSD.
ELEMENTS
Určuje, že sloupce se vrátí jako dílčí prvky. V opačném případě je dotaz mapuje na atributy XML. Tato možnost je podporována pouze v RAWAUTOPATH a režimech. Další informace naleznete v tématu Použití režimu RAW s jazykem FOR XML.
XSINIL
Určuje, že element s atributem xsi:nil nastaveným na Hodnotu True je vytvořen pro NULL hodnoty sloupce. Tuto možnost můžete zadat pouze pomocí direktivy ELEMENTS . Další informace najdete tady:
ABSENT
Označuje, že u NULL hodnot sloupců nejsou do výsledku XML přidány odpovídající elementy XML. Tuto možnost zadejte pouze pomocí parametru ELEMENTS.
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 zadáte prázdný řetězec, například FOR XML PATH ('')), element obálky se negeneruje. Použití PATH může poskytnout jednodušší alternativu k dotazům napsaným pomocí direktivy EXPLICIT. Další informace naleznete v tématu Použití režimu PATH s FOR XML.
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 EXPLICIT režimu je nutné zadat tuto možnost. Tato možnost je výchozí v AUTO režimu.
TYPE
Určuje, že dotaz vrátí výsledky jako xml typ. Další informace naleznete v tématu Direktiva TYPE v dotazech FOR XML.
ROOT [ ('RootName') ]
Určuje, že se do výsledného XML přidá jeden element nejvyšší úrovně. Volitelně můžete zadat název kořenového prvku, který chcete vygenerovat. Pokud nezadáte kořenový název, přidá se výchozí <root> prvek.
Další informace naleznete v tématu FOR XML (SQL Server).
Example
Následující příklad určuje FOR XML AUTO s možnostmi TYPE a XMLSCHEMA.
TYPE Vzhledem k možnosti dotaz vrátí výsledek nastavený na klienta 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 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;
PRO JSON
Remarks
Ve službě Fabric Data Warehouse musí dotaz končit textem FOR JSON, takže ho nemůžete použít v poddotazech.
JSON
Zadejte FOR JSON , aby se vrátily 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 najdete v FOR JSON tématu Formátování výsledků dotazu ve formátu JSON pomocí formátu JSON.
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 automaticky pomocí režimu AUTO.
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 s režimem PATH.
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 Zahrnutí hodnot Null ve formátu JSON – možnost INCLUDE_NULL_VALUES.
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 s možností ROOT.
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 naleznete v Odebrání hranatých závorek z JSON – možnost WITHOUT_ARRAY_WRAPPER.
Další informace najdete v tématu Formátování výsledků dotazu ve formátu JSON ve formátu JSON.
Související obsah
- SELECT (Transact-SQL)
- Použití výstupu FOR JSON v databázovém stroji SQL a v klientských aplikacích