2013-06-13 2 views
6

Come il titolo, tutte le menti aperte vengono accoltiIn SQLServer 2012 TSQL, qual è la differenza di utilizzo di XML RAW, AUTO XML e XML PATH

ho provato nel mio computer, l'uscita sembra essere lo stesso.

Ad esempio.

USE BOB_DATABASE 
SELECT ID, Name, First_Name, Last_Name FROM DBO.T_User 
FOR XML AUTO 

USE BOB_DATABASE 
SELECT ID, Name, First_Name, Last_Name FROM DBO.T_User 
FOR XML RAW 

USE BOB_DATABASE 
SELECT ID, Name, First_Name, Last_Name FROM DBO.T_User 
FOR XML RAW, ELEMENTS 

USE BOB_DATABASE 
SELECT ID, Name, First_Name, Last_Name FROM DBO.T_User 
FOR XML PATH('CUSTOMERS') 
+0

Se la vostra domanda è su SQL Server 2012, perché ha un tag MySQL e non uno SQL Server? Puoi [modificare] e correggere ciò per cui è chiaro di cosa stai chiedendo? Non sono affatto la stessa cosa. –

risposta

7

Sfortunatamente non sono la stessa cosa. Guarda come sono disposti i nodi. Guarda gli attributi. Ci sono sottili differenze che hanno grandi implicazioni su come l'XML verrà consumato. Forse hai bisogno di controllare l'elemento root: ROOT ('SomeElementName'). MSDN ha una spiegazione davvero completa di ciascuna delle opzioni di sintassi. MSDN FOR XML. Ho pubblicato un codice che ti aiuterà a giocare con le differenze. Inoltre, alcune delle sintassi avranno modifiche evidenti solo quando si esegue un join nel codice. In tal modo aiutandoti a stabilire la gerarchia.

IF OBJECT_ID('tempdb..#XmlTestTable') IS NOT NULL DROP TABLE #XmlTestTable 
CREATE TABLE #XmlTestTable 
(
    ID INT PRIMARY KEY IDENTITY(1,1), 
    FirstName VARCHAR(20), 
    LastName VARCHAR(20) 
) 
INSERT INTO #XmlTestTable (FirstName,LastName) VALUES 
('John','Doe'), 
('Jane','Doe'), 
('Brian','Smith'), 
('Your','Mom') 

--YOUR TESTS 
SELECT * FROM #XmlTestTable FOR XML AUTO 
SELECT * FROM #XmlTestTable FOR XML RAW 
SELECT * FROM #XmlTestTable FOR XML RAW, ELEMENTS 
SELECT * FROM #XmlTestTable FOR XML PATH('Customers') 

DROP TABLE #XmlTestTable 
9

XML RAW: ogni riga nel set di risultati viene considerata come un elemento con le colonne come attributi.

Esempio:

USE BOB_DATABASE 
SELECT ID, Name, First_Name, Last_Name 
FROM DBO.T_User 
FOR XML RAW; 

USCITA: AUTO

<row id="7801020202083" First_Name="John" Surname="Doe" /> 
<row id="9812150201082" First_Name="Samantha" Surname="Hill" /> 

XML: nomi delle tabelle sono i vostri elementi

Esempio:

USE BOB_DATABASE 
SELECT ID, Name, First_Name, Last_Name 
FROM DBO.T_User 
FOR XML AUTO; 

USCITA:

012.
<DBO.T_USER id="7801020202083" First_Name="John" Surname="Doe" /> 
<DBO.T_USER id="7801020202083" First_Name="John" Surname="Doe" /> 

Percorso XML: le colonne della tabella vengono passate come elementi secondari.

Esempio:

USE BOB_DATABASE 
SELECT ID, Name, First_Name, Last_Name 
FROM DBO.T_User 
FOR XML PATH; 

USCITA:

<row> 
    <id>7801020202083</id> 
    <First_Name>John</First_Name> 
    <Surname>Doe</Surname> 
</row> 
<row> 
    <id>7801020202083</id> 
    <First_Name>John</First_Name> 
    <Surname>Doe</Surname> 
</row> 

Si prega di controllare anche questo blog https://www.simple-talk.com/sql/learn-sql-server/using-the-for-xml-clause-to-return-query-results-as-xml/ per una ripartizione migliore.

+0

cosa succede se si aggiungono ** elementi ** dopo 'for xml raw', come' per xml raw, elements', qualsiasi differenza tra questo con 'for xml path ('')' – LONG

1

differenza tra prime e auto
-auto produce nomi di testate utilizzando il nome della tabella, crudo utilizza riga (oppure si può ignorare utilizzando grezzo ('myname')

-Se query è un join, auto crea sottosezioni per il join tabella

differenza tra prima e percorso

- @ simbolo preceduto sul nome della colonna quando si utilizza percorso popolano nell'intestazione fila

- \ simbolo prefissato su yo ur nome della colonna quando si utilizza percorso popolare in nuove sezioni (lo stesso si unisce farlo utilizzando auto, ma più flessibile) spiegazione

fab qui con facile seguire esempi qui: http://thinknook.com/sql-server-returning-xml-results-2012-12-01/