Udostępnij przez


Kolumny o nazwie

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Poniżej przedstawiono konkretne warunki, w których kolumny zestawu danych o nazwie są mapowane, z uwzględnieniem wielkości liter, do wynikowego dokumentu XML.

  • Nazwa kolumny zaczyna się od znaku (@).

  • Nazwa kolumny nie zaczyna się od znaku (@).

  • Nazwa kolumny nie zaczyna się od znaku (@) i zawiera znak ukośnika (/).

  • Kilka kolumn ma ten sam prefiks.

  • Jedna kolumna ma inną nazwę.

Nazwa kolumny zaczyna się od znaku @ (@)

Jeśli nazwa kolumny zaczyna się od znaku (@) i nie zawiera znaku ukośnika (/), zostanie utworzony atrybut row elementu, który ma odpowiednią wartość kolumny. Na przykład następujące zapytanie zwraca zestaw wierszy z dwiema kolumnami (@PmId, Name). W wynikowym kodzie XML atrybut PmId jest dodawany do odpowiedniego elementu row, a wartość ProductModelID jest do niego przypisywana.

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

Jest to wynik:

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

Atrybuty muszą znajdować się przed innymi typami węzłów, takimi jak węzły elementów i węzły tekstowe, na tym samym poziomie. Następujące zapytanie zwróci błąd:

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

Nazwa kolumny nie zaczyna się od znaku (@ @)

Jeśli nazwa kolumny nie zaczyna się od znaku (@), nie jest jednym z testów węzła XPath i nie zawiera znaku ukośnika (/), zostanie utworzony element XML, który jest podelementem elementu wiersza. row

Następujące zapytanie określa nazwę kolumny, wynik. Dlatego do elementu result jest dodawany element podrzędny row.

SELECT 2 + 2 as result
for xml PATH;

Jest to wynik:

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

Następujące zapytanie określa nazwę kolumny, ManuWorkCenterInformation, dla kodu XML zwróconego przez zapytanie XQuery określonego względem kolumny Instructions typu xml. Dlatego element ManuWorkCenterInformation jest dodawany jako element podrzędny elementu row.

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;

Jest to wynik:

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

Nazwa kolumny nie zaczyna się od znaku (@) i zawiera znak ukośnika (/)

Jeśli nazwa kolumny nie zaczyna się od znaku (@), ale zawiera znak ukośnika (/), nazwa kolumny wskazuje hierarchię XML. Jeśli na przykład nazwa kolumny to "Name1/Name2/Name3.../Namen", każda nazwai reprezentuje nazwę elementu zagnieżdżonego w bieżącym elemencie wiersza (dla i = 1) lub znajduje się w elemencie o nazwiei-1. Jeśli Nazwan zaczyna się od @, jest mapowana na atrybut Nazwan-1 elementu.

Na przykład następujące zapytanie zwraca identyfikator pracownika i nazwę reprezentowaną jako złożony element EmpName zawierający Firstnazwę , Middlei Last .

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;

Nazwy kolumn są używane jako ścieżka w konstruowaniu kodu XML w trybie PATH. Nazwa kolumny, która zawiera wartości identyfikatora pracownika, zaczyna się od "@". W związku z tym atrybut EmpID, jest dodawany do row elementu . Wszystkie inne kolumny zawierają znak ukośnika (/) w nazwie kolumny wskazującej hierarchię. Wynikowy kod XML będzie miał element podrzędny EmpName pod elementem row, a element podrzędny EmpName będzie miał elementy podrzędne First, Middle i Last.

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

Drugie imię pracownika ma wartość null, a domyślnie wartość null jest mapowana na brak elementu ani atrybutu. Jeśli chcesz wygenerować elementy dla wartości NULL, możesz określić dyrektywę ELEMENTS za pomocą biblioteki XSINIL, jak pokazano w tym zapytaniu.

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;

Jest to wynik:

<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>

Domyślnie tryb PATH generuje kod XML skoncentrowany na elementach. W związku z tym określenie dyrektywy ELEMENTS w zapytaniu trybu PATH nie ma żadnego wpływu. Jednak, jak pokazano w poprzednim przykładzie, dyrektywa ELEMENTS jest przydatna w przypadku XSINIL do generowania elementów dla wartości null.

Oprócz identyfikatora i nazwy następujące zapytanie pobiera adres pracownika. Zgodnie ze ścieżką w nazwach kolumn dla kolumn adresowych, element podrzędny Address jest dodawany do elementu row, a szczegóły adresu są dodawane jako elementy podrzędne elementu Address.

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;

Jest to wynik:

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

Kilka kolumn ma ten sam prefiks ścieżki

Jeśli kilka kolejnych kolumn ma ten sam prefiks ścieżki, są grupowane razem pod tą samą nazwą. Jeśli są używane różne prefiksy przestrzeni nazw, nawet jeśli są one powiązane z tą samą przestrzenią nazw, ścieżka jest uznawana za inną. W poprzednim zapytaniu kolumny FirstName, MiddleName i LastName mają ten sam prefiks EmpName. W związku z tym są one dodawane jako elementy podrzędne EmpName elementu. Tak jest również podczas tworzenia elementu Address w poprzednim przykładzie.

Jedna kolumna ma inną nazwę

Jeśli między innymi kolumnami pojawia się kolumna o innej nazwie, spowoduje to przerwanie grupowania, jak pokazano w poniższym zmodyfikowanym zapytaniu. Zapytanie przerywa grupowanie wartości FirstName, MiddleName i LastName, zgodnie z opisem w poprzednim zapytaniu, poprzez dodanie kolumn adresów pomiędzy kolumnami FirstName i MiddleName.

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;

W rezultacie zapytanie tworzy dwa EmpName elementy. EmpName Pierwszy element ma element podrzędnyFirstName, a drugi EmpName element ma elementy podrzędne MiddleName i LastName .

Jest to wynik:

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

Zobacz także