Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wyeksportować XML za pomocą zapytania SQL Server?

Jeśli potrzebujesz tylko przechowywać XML i nie robić z nim nic więcej, jest to prawdopodobnie najłatwiejszy sposób na osiągnięcie tego - używając prostego 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);
}

Spowoduje to utworzenie pliku D:\test.xml (lub zmień to, aby pasowało do twojego systemu) i umieści te znaczniki XML w tym pliku.

SqlCommand obiekt ma również .ExecuteXmlReader() metoda, która zwróci XmlReader obiekt do skanowania i manipulowania XML - a nie tylko zwracania ciągu. Użyj tego, co jest dla Ciebie najbardziej sensowne!

PS:również wyjście FOR XML AUTO jest trochę .... powiedzmy ... nieoptymalne. Używa dbo.Employee ponieważ jest to główny tag XML i tak dalej... z SQL Server 2008, zdecydowanie polecam przyjrzenie się użyciu FOR XML PATH zamiast tego - pozwala dostosować i dostosować układ danych wyjściowych XML.

Porównaj oryginalne wyjście XML z 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" />

w stosunku do tego zapytania - tylko po to, aby zobaczyć różnicę:

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

Dane wyjściowe to:

<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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertuj numer miesiąca na nazwę miesiąca w programie SQL Server (T-SQL)

  2. Sortuj według daty w SQL

  3. Jak odwoływać się do kluczy JSON zawierających znaki specjalne podczas korzystania z OPENJSON, JSON_QUERY i JSON_VALUE (SQL Server)

  4. Znajdź min i max dla podzbiorów kolejnych wierszy - przerw i wysp

  5. Jak rozwiązać błąd system.data.sqlclient.sqlexception (0x80131904)?