Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да експортирате XML с помощта на заявка на SQL Server?

Ако трябва само да съхраните XML и да не правите нищо друго с него, това вероятно е най-лесният начин да постигнете това - като използвате просто 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);
}

Това ще създаде файл D:\test.xml (или го променете, за да съответства на вашата система) и ще постави тези XML тагове в този файл.

SqlCommand обект също има .ExecuteXmlReader() метод, който би върнал XmlReader обект за сканиране и манипулиране на XML - не просто връщане на низ. Използвайте всичко, което е най-разумно за вас!

PS:също, резултатът от FOR XML AUTO е малко .... да кажем ... неоптимално. Той използва dbo.Employee тъй като това е основен XML таг и така нататък... със SQL Server 2008, силно бих ви препоръчал да разгледате използването на FOR XML PATH вместо това - позволява ви да настройвате и персонализирате оформлението на XML изхода.

Сравнете вашия оригинален XML изход с 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" />

срещу тази заявка - само за да видите разликата:

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

Резултатът е:

<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. Целостта на транзакцията ми се губи с изключение TransactionInDoubtException

  2. Съхраняване на единични кавички в променлива varchar SQL Server 2008

  3. Как да активирате всички ограничения за проверка в базата данни на SQL Server - SQL Server / TSQL урок, част 88

  4. Ред на изпълнение на оператори на SQL Server

  5. Как да добавите колона за файлов поток в първия дизайнер на модел Entity Framework 4.0?