sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik XML exporteren met behulp van een SQL Server-query?

Als u alleen de XML hoeft op te slaan en er niets anders aan hoeft te doen, is dit waarschijnlijk de gemakkelijkste manier om dit te bereiken - met behulp van het simpele 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);
}

Dit maakt een bestand D:\test.xml . aan (of verander dat zodat het overeenkomt met uw systeem) en zal die XML-tags in dat bestand plaatsen.

Het SqlCommand object heeft ook een .ExecuteXmlReader() methode die een XmlReader . zou retourneren object om de XML te scannen en te manipuleren - niet alleen een string teruggeven. Gebruik wat voor jou het meest logisch is!

PS:ook de uitvoer van FOR XML AUTO is een beetje .... laten we zeggen ... suboptimaal. Het gebruikt de dbo.Employee aangezien het de belangrijkste XML-tag is, enzovoort... met SQL Server 2008, raad ik u ten zeerste aan om FOR XML PATH te gebruiken in plaats daarvan kunt u de lay-out van de XML-uitvoer aanpassen en aanpassen.

Vergelijk uw originele XML-uitvoer met 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" />

tegen deze zoekopdracht - gewoon om het verschil te zien:

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

Uitgang is:

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


  1. COPY FROM gebruiken in een Rails-app op Heroku met de Postgresql-backend

  2. Dubbele aanhalingstekens in aliassen van Oracle-kolommen

  3. Oracle - Hoe beheert Oracle transactiespecifieke DML-statements?

  4. REPEAT functie equivalent in Oracle