Udostępnij przez


Kolumny z nazwą

Są następujące szczególne warunki, w których zestaw wierszy jest mapowanych kolumny z nazwą, przypadek-poufne uzyskane XML:

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

  • Nazwa kolumna nie rozpoczyna się od znaku (@).

  • Nazwa kolumna nie rozpoczyna się od znaku @ i zawiera ukośnik (/).

  • Kilka kolumn współużytkują ten sam prefiks.

  • Jedna kolumna ma inną nazwę.

Kolumny nazwa rozpoczyna się od znaku (@)

Jeśli nazwa kolumna zaczyna znak (@) i nie zawiera znaku kreski ułamkowej (/), atrybut <row> utworzonego elementu, który ma wartość kolumna odpowiadające.Na przykład poniższa kwerenda zwraca zestaw wierszy dwie kolumna (@ PmId nazwę).Wynikowy XML PmId dodaje się odpowiedni atrybut <row> element i wartość ProductModelID jest przypisany do niego.

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

Jest to wynikiem:

<row PmId="7">

<Name>HL Touring Frame</Name>

</row>

Uwaga, że atrybuty muszą pochodzić przed wszelkich innych typów węzłów, takich jak węzłów element i węzłów tekstu, w tym samym poziom.Następująca kwerenda zwróci błąd:

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

Nazwa kolumny nie rozpoczyna się od znaku (@)

Jeśli nazwa kolumna nie rozpoczyna się od znaku (@), nie jest jednym z testów węźle XPath i nie zawiera znak ukośnika (/), element XML, który jest podelemencie elementu wiersza <row> jest tworzona domyślnie.

Następująca kwerenda określa nazwę kolumna, a wynik.Dlatego <result> element podrzędność zostanie dodany do <row> elementu.

SELECT 2+2 as result
for xml PATH

Jest to wynikiem:

<row>

<result>4</result>

</row>

Następująca kwerenda określa nazwę kolumna, ManuWorkCenterInformation, XML zwróconych przez XQuery określone przeciwko kolumnie instrukcje xml typu.Dlatego <ManuWorkCenterInformation> element jest dodawany jako element podrzędność <row> elementu.

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

Jest to wynikiem:

<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 rozpoczyna się od znaku (@) i zawiera ukośnik (/)

Jeśli nazwa kolumna nie rozpoczyna się od znaku (@), ale zawiera ukośnik (/) wskazuje nazwę kolumna, hierarchii języka XML.Na przykład, jeśli nazwa kolumna jest "Name1/Name2/Name3.../Namen ", każda nazwai reprezentuje nazwę elementu, który jest zagnieżdżony w bieżącym elemencie wiersza (dla i = 1) lub w obszarze elementu, który ma nazwęi 1.Jeśli nazwan uruchamia '@' jest mapowany do atrybut nazwyn-1 element.

Na przykład, poniższa kwerenda zwraca identyfikator pracownika (BusinessEntityID) i nazwy, które są reprezentowane jako element złożony EmpName zawierający imię, środkowy i nazwa.

SELECT BusinessEntityID "@EmpID", 
       FirstName  "EmpName/First", 
       MiddleName "EmpName/Middle", 
       LastName   "EmpName/Last"
FROM   HumanResources.Employee AS E
INNER JOIN Person.Person AS P
ON  E.BusinessEntityIDID = P.BusinessEntityIDID
WHERE  E.BusinessEntityID=4
FOR XML PATH;

kolumna Nazwy są używane jako ścieżka w konstruowaniu XML w trybie ścieżka.Nazwa kolumna, która zawiera wartości Identyfikatora pracownika, rozpoczyna się od '@'.Dlatego atrybut EmpID, dodaje się <row> elementu.Wszystkie pozostałe kolumna zawierają znak ukośnika ('/ ') w polu Nazwa kolumna oznacza hierarchii.Wynikowy XML będą miały <EmpName> podrzędność w <row> element i <EmpName> podrzędność będą miały <First>, <Middle> i <Last> elementy podrzędność elementu.

<row EmpID="4">

<EmpName>

<First>Rob</First>

<Last>Walters</Last>

</EmpName>

</row>

Imienia pracownika jest null, a domyślnie wartość null jest mapowany na braku element lub atrybut.Elementów generowanych dla wartości NULL, należy można określić dyrektywy elementy z XSINIL, jak pokazano w tej kwerendzie.

SELECT E.BusinessEntityID "@EmpID", 
       FirstName  "EmpName/First", 
       MiddleName "EmpName/Middle", 
       LastName   "EmpName/Last"
FROM   HumanResources.Employee AS E
INNER JOIN Person.Person AS P
ON E.BusinessEntityID = P.BusinessEntityID 
WHERE E.BusinessEntityID=4
FOR XML PATH, ELEMENTS XSINIL;

Jest to wynikiem:

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

EmpID="4">

<EmpName>

<First>Rob</First>

<Middle xsi:nil="true"/>

<Last>Walters</Last>

</EmpName>

</row>

Domyślnie tryb ścieżki generuje zorientowany na element XML.Dlatego określanie dyrektywy elementów w kwerendzie tryb ścieżki nie ma wpływu.Jednak jak pokazano w poprzednim przykładzie, dyrektywy elementów jest użyteczne z XSINIL do generowania elementy dla wartości null.

Oprócz identyfikator i nazwę poniższa kwerenda pobiera adres pracownika.Według ścieżka w nazwach kolumn kolumna adres <Address> element podrzędność zostanie dodany do <row> element i dane adresowe są dodawane jako elementy podrzędność elementu <Address> elementu.

SELECT E.BusinessEntityID   "@EmpID", 
       FirstName    "EmpName/First", 
       MiddleName   "EmpName/Middle", 
       LastName     "EmpName/Last",
       AddressLine1 "Address/AddrLine1",
       AddressLine2 "Address/AddrLIne2",
       City         "Address/City"
FROM   HumanResources.Employee AS E
INNER JOIN Person.Person AS P ON E.BusinessEntityID = P.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress AS BEA 
    ON BEA.BusinessEntityID = P.BusinessEntityID
INNER JOIN Person.Address AS A ON A.AddressID = BEA.AddressID
WHERE E.BusinessEntityID = 4
FOR XML PATH

Jest to wynikiem:

<row EmpID="4">
  <EmpName>
    <First>Rob</First>
    <Last>Walters</Last>
  </EmpName>
  <Address>
    <AddrLine1>5678 Lakeview Blvd.</AddrLine1>
    <City>Minneapolis</City>
  </Address>
</row>

Kilka kolumn współużytkować ten sam prefiks ścieżki

Jeśli kilka kolejnych kolumn mają prefiks tej samej ścieżka, są pogrupowane pod taką samą nazwą.Jeśli prefiksy inny obszar nazw są używane, nawet jeśli są one związane z tych samych nazw, ścieżka jest uważany za różne.W poprzedniej kwerendy kolumn Imię, MiddleName i nazwisko współużytkują ten sam prefiks EmpName.Dlatego są dodawane jako obiekty podrzędne <EmpName> elementu.To jest również przypadek gdy zostały tworzenie <Address> elementu w poprzednim przykładzie.

Jedna kolumna ma inną nazwę

Jeśli kolumna pod inną nazwą wyświetlany między nimi, spowoduje zerwanie grupowanie, jak pokazano w następującej kwerendzie zmodyfikowane.Kwerenda podziałów grupowanie imię, MiddleName i nazwisko, jak określono w poprzedniej kwerendy, dodając adres kolumny między kolumnami FirstName i MiddleName.

SELECT E.BusinessEntityID   "@EmpID", 
       FirstName    "EmpName/First", 
       AddressLine1 "Address/AddrLine1",
       AddressLine2 "Address/AddrLine2",
       City         "Address/City",
       MiddleName   "EmpName/Middle", 
       LastName     "EmpName/Last"
FROM   HumanResources.Employee AS E
INNER JOIN Person.Person AS P ON E.BusinessEntityID = P.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress AS BEA 
    ON BEA.BusinessEntityID = P.BusinessEntityID
INNER JOIN Person.Address AS A ON A.AddressID = BEA.AddressID
WHERE E.BusinessEntityID = 4
FOR XML PATH;

W wyniku kwerendy tworzy dwa <EmpName> elementów.Pierwszy <EmpName> element ma <FirstName> , a drugi element podrzędność <EmpName> element ma <MiddleName> i <LastName> elementy podrzędność elementu.

Jest to wynikiem:

<row EmpID="4">

<EmpName>

<First>Rob</First>

</EmpName>

<Address>

<AddrLine1>5678 Lakeview Blvd.</AddrLine1>

<City>Minneapolis</City>

</Address>

<EmpName>

<Last>Walters</Last>

</EmpName>

</row>

Zobacz także

Koncepcje