Colonne provviste di un nomeColumns with a Name

Di seguito vengono illustrate le condizioni specifiche in cui viene eseguito il mapping tra le colonne del set di righe provviste di nome e il codice XML risultante, con distinzione tra maiuscole e minuscole:The following are the specific conditions in which rowset columns with a name are mapped, case-sensitive, to the resulting XML:

  • Il nome di colonna inizia con un simbolo di chiocciola (@)The column name starts with an at sign (@).

  • Il nome di colonna non inizia con un simbolo di chiocciola (@)The column name does not start with an at sign (@).

  • Il nome di colonna non inizia con un simbolo di chiocciola (@) e contiene una barra (/)The column name does not start with an at sign@ and contains a slash mark (/).

  • Più colonne condividono lo stesso prefisso.Several columns share the same prefix.

  • Una colonna ha un nome diverso.One column has a different name.

Il nome di colonna inizia con un simbolo di chiocciola (@)Column Name Starts with an At Sign (@)

Se il nome della colonna inizia con un simbolo di chiocciola (@) e non contiene una barra (/), viene creato un attributo dell'elemento <row> con il valore di colonna corrispondente.If the column name starts with an at sign (@) and does not contain a slash mark (/), an attribute of the <row> element that has the corresponding column value is created. Ad esempio, la query seguente restituisce un set di righe a due colonne (@PmId, Name).For example, the following query returns a two-column (@PmId, Name) rowset. Nel codice XML risultante, un attributo PmId viene aggiunto all'elemento <row> corrispondente e gli viene assegnato un valore di ProductModelID.In the resulting XML, a PmId attribute is added to the corresponding <row> element and a value of ProductModelID is assigned to it.


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

Risultato:This is the result:

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

Si noti che gli attributi devono precedere qualsiasi altro tipo di nodo presente nello stesso livello, ad esempio nodi di elemento e di testo.Note that attributes must come before any other node types, such as element nodes and text nodes, in the same level. La query seguente restituirà un errore:The following query will return an error:

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

Il nome di colonna non inizia con un simbolo di chiocciola (@)Column Name Does Not Start with an At Sign (@)

Se il nome di colonna non inizia con un simbolo di chiocciola (@), non è uno dei test di nodo XPath e non contiene una barra (/), viene creato un elemento XML che è un sottoelemento dell'elemento riga, per impostazione predefinita <row>.If the column name does not start with an at sign (@), is not one of the XPath node tests, and does not contain a slash mark (/), an XML element that is a subelement of the row element, <row> by default, is created.

La query seguente specifica il nome della colonna, il risultato.The following query specifies the column name, the result. Un elemento figlio <result> viene pertanto aggiunto all'elemento <row>.Therefore, a <result> element child is added to the <row> element.

SELECT 2+2 as result  
for xml PATH  

Risultato:This is the result:

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

La query seguente specifica il nome della colonna, ManuWorkCenterInformation, per il codice XML restituito dall'espressione XQuery specificata sulla colonna Instructions di tipo xml.The following query specifies the column name, ManuWorkCenterInformation, for the XML returned by the XQuery specified against Instructions column of xml type. Un elemento <ManuWorkCenterInformation> viene pertanto aggiunto come figlio dell'elemento <row>.Therefore, a <ManuWorkCenterInformation> element is added as a child of the <row> element.

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   
go  

Risultato:This is the result:

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

Il nome di colonna non inizia con un simbolo di chiocciola (@) e contiene una barra (/)Column Name Does Not Start with an At Sign (@) and Contains a Slash Mark (/)

Se il nome di colonna non inizia con un simbolo di chiocciola (@), ma contiene una barra (/), il nome della colonna indica una gerarchia XML.If the column name does not start with an at sign (@), but contains a slash mark (/), the column name indicates an XML hierarchy. Ad esempio, se il nome della colonna è "Name1/Name2/Name3.../Namen ", ogni Namei rappresenta un nome di elemento nidificato nell'elemento di riga corrente (per i=1) o che si trova sotto l'elemento il cui nome è Namei-1.For example, if the column name is "Name1/Name2/Name3.../Namen ", each Namei represents an element name that is nested in the current row element (for i=1) or that is under the element that has the name Namei-1. Se Namen inizia con il simbolo @, viene eseguito il mapping a un attributo dell'elemento Namen-1 .If Namen starts with '@', it is mapped to an attribute of Namen-1 element.

Ad esempio, la query seguente restituisce l'ID e il nome di un dipendente rappresentati come un elemento complesso EmpName che contiene nome, secondo nome e cognome.For example, the following query returns an employee ID and name that are represented as a complex element EmpName that contains a First, Middle, and Last name.

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  

I nomi di colonna vengono usati come un percorso nella creazione del codice XML in modalità PATH.The column names are used as a path in constructing XML in the PATH mode. Il nome della colonna che contiene i valori ID dipendente inizia con il simbolo @. Quindi viene aggiunto un attributo EmpID all'elemento <row>.The column name that contains employee ID values, starts with '@'.Therefore, an attribute, **EmpID**, is added to the <`row`> element.</span></span> <span data-ttu-id="2b4c7-131">I nomi di tutte le altre colonne contengono una barra ("/"), che indica la gerarchia.</span><span class="sxs-lookup"><span data-stu-id="2b4c7-131">All other columns include a slash mark ('/') in the column name that indicates hierarchy. Il codice XML risultante avrà l'elemento figlio <EmpName> sotto l'elemento <row> e l'elemento figlio <EmpName> avrà gli elementi figlio <First>, <Middle> e <Last>.The resulting XML will have the <EmpName> child under the <row> element, and the <EmpName> child will have <First>, <Middle> and <Last> element children.

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

Il valore del secondo nome del dipendente è Null e, per impostazione predefinita, il valore Null corrisponde all'assenza dell'elemento o attributo.The employee middle name is null and, by default, the null value maps to the absence of the element or attribute. Se si desidera la generazione di elementi per i valori NULL, è possibile specificare la direttiva ELEMENTS con XSINIL, come illustrato in questa query.If you want elements generated for the NULL values, you can specify the ELEMENTS directive with XSINIL as shown in this query.

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  

Risultato:This is the result:

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

Per impostazione predefinita, la modalità PATH genera XML incentrato sugli elementi.By default, the PATH mode generates element-centric XML. Specificare la direttiva ELEMENTS in una query in modalità PATH pertanto non produce effetti.Therefore, specifying the ELEMENTS directive in a PATH mode query has no effect. Come illustrato nell'esempio precedente tuttavia, la direttiva ELEMENTS risulta utile con XSINIL per la generazione di elementi per i valori Null.However, as shown in the previous example, the ELEMENTS directive is useful with XSINIL to generate elements for null values.

Oltre all'ID e al nome, la query seguente recupera l'indirizzo di un dipendente.Besides the ID and name, the following query retrieves an employee address. Come per il percorso nei nomi di colonna per le colonne degli indirizzi, un elemento figlio <Address> viene aggiunto all'elemento <row> e i dettagli relativi agli indirizzi vengono aggiunti come elementi figlio dell'elemento <Address>.As per the path in the column names for address columns, an <Address> element child is added to the <row> element and the address details are added as element children of the <Address> element.

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  

Risultato:This is the result:

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

Più colonne condividono lo stesso prefisso di percorsoSeveral Columns Share the Same Path Prefix

Se più colonne successive condividono lo stesso prefisso di percorso, vengono raggruppate sotto lo stesso nome.If several subsequent columns share the same path prefix, they are grouped together under the same name. Se vengono utilizzati prefissi degli spazi dei nomi diversi, anche se associati allo stesso spazio dei nomi, un percorso viene considerato diverso.If different namespace prefixes are being used even if they are bound to the same namespace, a path is considered different. Nella query precedente, le colonne FirstName, MiddleName e LastName condividono lo stesso prefisso EmpName. Vengono pertanto aggiunte come elementi figlio dell'elemento <EmpName>.In the previous query, the FirstName, MiddleName, and LastName columns share the same EmpName prefix.Therefore, they are added as children of the <EmpName> element. Ciò si verifica anche nell'esempio precedente, nella fase di creazione dell'elemento <Address>.This is also the case when you were creating the <Address> element in the previous example.

Una colonna ha un nome diversoOne Column Has a Different Name

Se è presente una colonna con un nome diverso, interromperà il raggruppamento, come illustrato nella query modificata seguente.If a column with a different name appears in between, it will break the grouping, as shown in the following modified query. La query interrompe il raggruppamento di FirstName, MiddleName e LastName, come specificato nella query precedente, aggiungendo colonne di indirizzi fra le colonne FirstName e MiddleName.The query breaks the grouping of FirstName, MiddleName, and LastName, as specified in the previous query, by adding address columns in between the FirstName and MiddleName columns.

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  

Di conseguenza, la query crea due elementi <EmpName>.As a result, the query creates two <EmpName> elements. Il primo elemento <EmpName> ha l'elemento figlio <FirstName> e il secondo elemento <EmpName> ha gli elementi figlio <MiddleName> e <LastName>.The first <EmpName> element has the <FirstName> element child and the second <EmpName> element has the <MiddleName> and <LastName> element children.

Risultato:This is the result:

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

Vedere ancheSee Also

Utilizzare la modalità PATH con FOR XMLUse PATH Mode with FOR XML