Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie exportiere ich XML mit einer SQL Server-Abfrage?

Wenn Sie das XML nur speichern und nichts weiter tun müssen, ist dies wahrscheinlich der einfachste Weg, dies zu erreichen - mit einfachem ADO.NET:

string query = "SELECT EmployeeID, LastName, FirstName, Title, BirthDate, HireDate FROM dbo.Employees FOR XML AUTO";

using(SqlConnection _con = new SqlConnection("server=(local);database=Northwind;integrated security=SSPI;"))
using (SqlCommand _cmd = new SqlCommand(query, _con))
{
    _con.Open();
    string result = _cmd.ExecuteScalar().ToString();
    _con.Close();

    File.WriteAllText(@"D:\test.xml", result);
}

Dadurch wird eine Datei D:\test.xml erstellt (oder ändern Sie es so, dass es zu Ihrem System passt) und fügt diese XML-Tags in diese Datei ein.

Der SqlCommand Objekt hat auch einen .ExecuteXmlReader() Methode, die einen XmlReader zurückgeben würde Objekt, um das XML zu scannen und zu manipulieren - nicht nur einen String zurückzugeben. Verwenden Sie, was für Sie am sinnvollsten ist!

PS:auch die Ausgabe von FOR XML AUTO ist ein bisschen .... sagen wir mal ... suboptimal. Es verwendet den dbo.Employee als Haupt-XML-Tag und so weiter ... mit SQL Server 2008 würde ich Ihnen dringend empfehlen, sich mit der Verwendung von FOR XML PATH zu befassen Stattdessen können Sie das Layout der XML-Ausgabe optimieren und anpassen.

Vergleichen Sie Ihre ursprüngliche XML-Ausgabe mit FOR XML AUTO

<dbo.Employees _x0040_ID="1" LastName="Davolio" FirstName="Nancy" Title="Sales Representative" BirthDate="1948-12-08T00:00:00" HireDate="1992-05-01T00:00:00" />
<dbo.Employees _x0040_ID="2" LastName="Fuller" FirstName="Andrew" Title="Vice President, Sales" BirthDate="1952-02-19T00:00:00" HireDate="1992-08-14T00:00:00" />

gegen diese Abfrage - nur um den Unterschied zu sehen:

SELECT 
    [EmployeeID] AS '@ID',
    [LastName], [FirstName],
    [Title],
    [BirthDate], [HireDate]
FROM 
    [dbo].[Employees]
FOR XML PATH('Employee'), ROOT('Employees')

Ausgabe ist:

<Employees>
  <Employee ID="1">
    <LastName>Davolio</LastName>
    <FirstName>Nancy</FirstName>
    <Title>Sales Representative</Title>
    <BirthDate>1948-12-08T00:00:00</BirthDate>
    <HireDate>1992-05-01T00:00:00</HireDate>
  </Employee>
  <Employee ID="2">
    <LastName>Fuller</LastName>
    <FirstName>Andrew</FirstName>
    <Title>Vice President, Sales</Title>
    <BirthDate>1952-02-19T00:00:00</BirthDate>
    <HireDate>1992-08-14T00:00:00</HireDate>
  </Employee>