Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Zapytanie SELECT zwraca wyniki jako zestaw wierszy. Opcjonalnie możesz pobrać formalne wyniki zapytania SQL jako XML, określając klauzulę FOR XML w zapytaniu. Klauzulę FOR XML można używać w zapytaniach najwyższego poziomu i w podzapytaniach. Klauzula najwyższego poziomu FOR XML może być używana tylko w instrukcji SELECT . W podzapytaniach FOR XML można używać w instrukcjach INSERT, UPDATEi DELETE .
FOR XML można również używać w instrukcjach przypisania.
W klauzuli FOR XML należy określić jeden z następujących trybów:
RAWAUTOEXPLICITPATH
Tryb RAW generuje jeden <row> element na wiersz w zestawie wierszy zwracanym przez instrukcję SELECT . Hierarchię XML można wygenerować, pisząc zagnieżdżone FOR XML zapytania.
Tryb AUTO generuje zagnieżdżanie w wynikowym kodzie XML przy użyciu heurystyki na podstawie sposobu określenia instrukcji SELECT . Masz minimalną kontrolę nad kształtem wygenerowanego kodu XML. Zagnieżdżone FOR XML zapytania mogą być zapisywane w celu wygenerowania hierarchii XML poza kształtem XML generowanym przez AUTO heurystyki trybu.
Tryb EXPLICIT umożliwia większą kontrolę nad kształtem kodu XML. Możesz mieszać atrybuty i elementy, wybierając kształt kodu XML. Wymaga on określonego formatu dla wynikowego zestawu wierszy wygenerowanego z powodu wykonywania zapytania. Ten format zestawu wierszy jest następnie mapowany na kształt XML. Moc trybu polega na mieszaniu EXPLICIT atrybutów i elementów w dowolnej kolejności, tworzeniu otoek i zagnieżdżonych złożonych właściwościach, tworzeniu wartości rozdzielanych spacjami (na przykład OrderID atrybut może zawierać listę wartości identyfikatora zamówienia) i mieszaną zawartość.
Jednak zapytania w trybie pisania EXPLICIT mogą być kłopotliwe. Możesz użyć niektórych nowych FOR XML funkcji, takich jak pisanie zagnieżdżonych FOR XML RAWzapytań , AUTOlub PATH trybu i TYPE dyrektywy, zamiast używać EXPLICIT trybu do generowania hierarchii. Zagnieżdżone FOR XML zapytania mogą tworzyć dowolny kod XML, który można wygenerować przy użyciu EXPLICIT trybu . Aby uzyskać więcej informacji, zobacz Używanie zagnieżdżonych zapytań XML i dyrektywy TYPE w zapytaniach XML.
Tryb PATH wraz z funkcją zagnieżdżonego FOR XML zapytania zapewnia elastyczność EXPLICIT trybu w prostszy sposób.
Te tryby są w mocy tylko w przypadku wykonywania zapytania, dla którego są ustawione. Nie wpływają one na wyniki żadnych kolejnych zapytań.
FOR XML nie jest prawidłowy dla żadnego zaznaczenia, który jest używany z klauzulą FOR BROWSE .
Przykłady
Poniższa SELECT instrukcja pobiera informacje z Sales.Customer tabel i Sales.SalesOrderHeader w AdventureWorks2025 bazie danych. To zapytanie określa AUTO tryb w klauzuli FOR XML :
USE AdventureWorks2022;
GO
SELECT Cust.CustomerID,
OrderHeader.CustomerID,
OrderHeader.SalesOrderID,
OrderHeader.STATUS
FROM Sales.Customer Cust
INNER JOIN Sales.SalesOrderHeader OrderHeader
ON Cust.CustomerID = OrderHeader.CustomerID
FOR XML AUTO;
Klauzula FOR XML i nazwy serwerów
SELECT Gdy instrukcja z klauzulą FOR XML określa czteroczęściową nazwę w zapytaniu, nazwa serwera nie jest zwracana w wynikowym dokumencie XML podczas wykonywania zapytania na komputerze lokalnym. Jednak nazwa serwera jest zwracana jako czteroczęściowa nazwa, gdy zapytanie jest wykonywane na serwerze sieciowym.
Rozważmy na przykład następujące zapytanie:
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person
FOR XML AUTO;
Serwer lokalny: Gdy ServerName jest serwerem lokalnym, zapytanie zwraca następujący tekst:
<AdventureWorks2022.Person.Person LastName="Achong" />
Serwer sieciowy: Gdy ServerName jest serwerem sieciowym, zapytanie zwraca następujący tekst:
<ServerName.AdventureWorks2022.Person.Person LastName="Achong" />
Unikaj niejednoznaczności: Tę potencjalną niejednoznaczność można uniknąć, określając ten alias:
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person x
FOR XML AUTO;
Teraz zapytanie niejednoznaczne zwraca następujący tekst:
<x LastName="Achong"/>
Treści powiązane
- Podstawowa składnia klauzuli FOR XML
- Używanie trybu RAW z formatem FOR XML
- Używanie trybu AUTOMATYCZNEGO z formatem FOR XML
- Używanie trybu JAWNEGO z formatem FOR XML
- Używanie trybu PATH z formatem FOR XML
- OPENXML (SQL Server)
- Dodawanie przestrzeni nazw do zapytań przy użyciu funkcji WITH XMLNAMESPACES