Sdílet prostřednictvím


Sloupce s názvem

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Níže jsou uvedené konkrétní podmínky, ve kterých jsou pojmenované sloupce sady řádků mapovány na výsledný XML, při rozlišování malých a velkých písmen:

  • Název sloupce začíná znakem@ ().

  • Název sloupce nezačíná zavináčem (@).

  • Název sloupce nezačíná znakem at (@) a obsahuje lomítko (/).

  • Několik sloupců sdílí stejnou předponu.

  • Sloupec má jiný název.

Název sloupce začíná znakem at (@)

Pokud název sloupce začíná znakem at (@) a neobsahuje lomítko (/), vytvoří se atribut row prvku, který má odpovídající hodnotu sloupce. Například následující dotaz vrátí sadu řádků se dvěma sloupci@PmId, Name. Ve výsledném souboru XML se k odpovídajícímu prvku PmId přidá atribut row a přiřadí se mu hodnota ProductModelID.

SELECT ProductModelID as "@PmId",
       Name
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;

Toto je výsledek:

<row PmId="7">
  <Name>HL Touring Frame</Name>
</row>

Atributy musí být před všemi ostatními typy uzlů, jako jsou uzly prvků a textové uzly, na stejné úrovni. Následující dotaz vrátí chybu:

SELECT Name,
       ProductModelID as "@PmId"
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;

Název sloupce nezačíná znakem at (@)

Pokud název sloupce nezačíná znakem at (@), není jedním z testů uzlu XPath a neobsahuje značku lomítka (/), vytvoří se element XML, který je ve výchozím nastavení dílčím prvkem řádku row .

Následující dotaz určuje název sloupce, výsledek. result Proto je do elementu row přidán podřízený prvek.

SELECT 2 + 2 as result
for xml PATH;

Toto je výsledek:

<row>
  <result>4</result>
</row>

Následující dotaz určuje název sloupce, ManuWorkCenterInformation, pro XML vracený pomocí XQuery určeného pro Instructions sloupec typu xml. ManuWorkCenterInformation Proto je prvek přidán jako podřízený prvek row prvku.

SELECT
  ProductModelID,
  Name,
  Instructions.query(
    'declare namespace MI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
     /MI:root/MI:Location
    ') as ManuWorkCenterInformation
FROM Production.ProductModel
WHERE ProductModelID=7
FOR XML PATH;

Toto je výsledek:

<row>
  <ProductModelID>7</ProductModelID>
  <Name>HL Touring Frame</Name>
  <ManuWorkCenterInformation>
    <MI:Location ...LocationID="10" ...></MI:Location>
    <MI:Location ...LocationID="20" ...></MI:Location>
     ...
  </ManuWorkCenterInformation>
</row>

Název sloupce nezačíná znakem at (@) a obsahuje lomítko (/).

Pokud název sloupce nezačíná znakem at (@), ale obsahuje lomítko (/), název sloupce označuje hierarchii XML. Pokud je například název sloupce "Name1/Name2/Name3.../Namen", představuje každý název elementu, který je vnořený v aktuálním prvku řádku (pro i = 1) nebo který je pod prvkem s názvem Namei-1. Pokud názevn začíná @, je mapován na atribut Namen-1 elementu.

Následující dotaz například vrátí ID zaměstnance a jméno, které jsou reprezentovány jako komplexní prvek EmpName , který obsahuje znak First, Middlea Last jméno.

SELECT EmployeeID "@EmpID",
       FirstName  "EmpName/First",
       MiddleName "EmpName/Middle",
       LastName   "EmpName/Last"
FROM   HumanResources.Employee E, Person.Contact C
WHERE  E.EmployeeID = C.ContactID  AND
       E.EmployeeID = 1
FOR XML PATH;

Názvy sloupců se používají jako cesta při vytváření XML v režimu PATH. Název sloupce, který obsahuje hodnoty ID zaměstnance, začíná znakem @. EmpIDAtribut je proto přidán do elementurow. Všechny ostatní sloupce obsahují značku lomítka (/) v názvu sloupce, který označuje hierarchii. Výsledný KÓD XML bude mít prvek EmpName jako podřízený prvek pod elementem row, a prvek EmpName bude mít podřízené prvky First, Middle a Last.

<row EmpID="1">
  <EmpName>
    <First>Gustavo</First>
    <Last>Achong</Last>
  </EmpName>
</row>

Prostřední jméno zaměstnance má hodnotu null a ve výchozím nastavení se hodnota null mapuje na absenci elementu nebo atributu. Pokud chcete, aby byly elementy generovány pro hodnoty NULL, můžete zadat direktivu ELEMENTS s použitím XSINIL, jak je znázorněno v tomto dotazu.

SELECT EmployeeID "@EmpID",
       FirstName  "EmpName/First",
       MiddleName "EmpName/Middle",
       LastName   "EmpName/Last"
FROM   HumanResources.Employee E, Person.Contact C
WHERE  E.EmployeeID = C.ContactID  AND
       E.EmployeeID = 1
FOR XML PATH, ELEMENTS XSINIL;

Toto je výsledek:

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      EmpID="1">
  <EmpName>
    <First>Gustavo</First>
    <Middle xsi:nil="true" />
    <Last>Achong</Last>
  </EmpName>
</row>

Režim PATH ve výchozím nastavení generuje XML orientovaný na element. Proto zadání direktivy ELEMENTS v dotazu režimu PATH nemá žádný vliv. Jak je ale znázorněno v předchozím příkladu, direktiva ELEMENTS je užitečná s XSINIL k vygenerování elementů pro hodnoty null.

Kromě ID a jména načte následující dotaz adresu zaměstnance. Podle cesty v názvech sloupců, které se týkají adres, se do elementu Address přidá podřízený prvek a podrobnosti adresy se přidají jako podřízené prvky do elementu row.

SELECT EmployeeID   "@EmpID",
       FirstName    "EmpName/First",
       MiddleName   "EmpName/Middle",
       LastName     "EmpName/Last",
       AddressLine1 "Address/AddrLine1",
       AddressLine2 "Address/AddrLIne2",
       City         "Address/City"
FROM   HumanResources.Employee E,
       Person.Contact C,
       Person.Address A
WHERE  E.EmployeeID = C.ContactID
AND    E.AddressID = A.AddressID
AND    E.EmployeeID = 1
FOR XML PATH;

Toto je výsledek:

<row EmpID="1">
  <EmpName>
    <First>Gustavo</First>
    <Last>Achong</Last>
  </EmpName>
  <Address>
    <AddrLine1>7726 Driftwood Drive</AddrLine1>
    <City>Monroe</City>
  </Address>
</row>

Několik sloupců sdílí společnou předponu cesty.

Pokud několik následujících sloupců sdílí stejnou předponu cesty, seskupí se společně pod stejným názvem. Pokud se používají různé předpony oboru názvů, i když jsou svázané se stejným oborem názvů, cesta se považuje za odlišnou. V předchozím dotazu sdílejí sloupce FirstName, MiddleName a LastName stejnou předponu EmpName. Proto se přidají jako podřízené prvky prvku EmpName. Jedná se také o případ, kdy jste vytvořili Address prvek v předchozím příkladu.

Jeden sloupec má jiný název.

Pokud se sloupec s jiným názvem zobrazí mezi, přeruší seskupení, jak je znázorněno v následujícím upraveném dotazu. Dotaz přeruší seskupení FirstName, MiddleName a LastName přidáním sloupců s adresami mezi sloupce FirstName a MiddleName, jak bylo specifikováno v předchozím dotazu.

SELECT EmployeeID "@EmpID",
       FirstName "EmpName/First",
       AddressLine1 "Address/AddrLine1",
       AddressLine2 "Address/AddrLIne2",
       City "Address/City",
       MiddleName "EmpName/Middle",
       LastName "EmpName/Last"
FROM   HumanResources.EmployeeAddress E,
       Person.Contact C,
       Person.Address A
WHERE  E.EmployeeID = C.ContactID
AND    E.AddressID = A.AddressID
AND    E.EmployeeID = 1
FOR XML PATH;

V důsledku toho dotaz vytvoří dva EmpName prvky. První EmpName prvek má FirstName podřízený prvek a druhý EmpName prvek má podřízené MiddleName a LastName prvky.

Toto je výsledek:

<row EmpID="1">
  <EmpName>
    <First>Gustavo</First>
  </EmpName>
  <Address>
    <AddrLine1>7726 Driftwood Drive</AddrLine1>
    <City>Monroe</City>
  </Address>
  <EmpName>
    <Last>Achong</Last>
  </EmpName>
</row>

Viz také