So you want to spit out some XML from SQL Server into a file, how can you do that? There are a couple of ways, I will show you how you can do it with SSIS. In the SSIS package you need an Execute SQL Task and a Script Task.

Let's get started

First create and populate these two tables in your database

  1. create table Artist (ArtistID int primary key not null,
  2. ArtistName ))
  3. go
  4. create table Album(AlbumID int primary key not null,
  5. ArtistID int not null,
  6. AlbumName ) not null,
  7. YearReleased smallint not null)
  8. go
  9. ,'Pink Floyd')
  10. ,'Incubus')
  11. ,'Prince')
  12. ,,)
  13. ,,)
  14. ,,)
  15. ,,)
  16. ,,)
  17. ,,)
  18. ,,)
 

Now create this proc

  1. create proc prMusicCollectionXML
  2. as
  3. declare @XmlOutput xml
  4. set @XmlOutput = (select ArtistName,AlbumName,YearReleased from Album
  5. join Artist on Album.ArtistID = Artist.ArtistID
  6. FOR XML AUTO, ROOT('MusicCollection'), ELEMENTS)
  7. select @XmlOutput
  8. go
 

After executing the proc

  1. exec prMusicCollectionXML
 

you will see the following output

  1. <MusicCollection>
  2. <Artist>
  3. <ArtistName>Pink Floyd</ArtistName>
  4. <Album>
  5. <AlbumName>Wish You Were Here</AlbumName>
  6. <YearReleased>1975</YearReleased>
  7. </Album>
  8. <Album>
  9. <AlbumName>The Wall</AlbumName>
  10. <YearReleased>1979</YearReleased>
  11. </Album>
  12. </Artist>
  13. <Artist>
  14. <ArtistName>Prince</ArtistName>
  15. <Album>
  16. <AlbumName>Purple Rain</AlbumName>
  17. <YearReleased>1984</YearReleased>
  18. </Album>
  19. <Album>
  20. <AlbumName>Lotusflow3r</AlbumName>
  21. <YearReleased>2009</YearReleased>
  22. </Album>
  23. <Album>
  24. <AlbumName>1999</AlbumName>
  25. <YearReleased>1982</YearReleased>
  26. </Album>
  27. </Artist>
  28. <Artist>
  29. <ArtistName>Incubus</ArtistName>
  30. <Album>
  31. <AlbumName>Morning View</AlbumName>
  32. <YearReleased>2001</YearReleased>
  33. </Album>
  34. <Album>
  35. <AlbumName>Light Grenades</AlbumName>
  36. <YearReleased>2006</YearReleased>
  37. </Album>
  38. </Artist>
  39. </MusicCollection>
 

So far so good, so how do we dump that data into a file? Create a new SSIS package add an ADO.NET Connection, name it AdventureWorksConnection Drop an Execute SQL Task onto your control flow and modify the properties so it looks like this

On the add a result set by clicking on the add button, change the variable name to User::XMLOutput if it is not already like that

Note!!! In SSIS 2008 this variable should be already created otherwise it will fail

Now execute the package. You will be greeted with the following message: Error: 0xC00291E3 at Execute SQL Task, Execute SQL Task: The result binding name must be set to zero for full result set and XML results. Task failed: Execute SQL Task In order to fix that, change the Result Name property from NewresultName to 0, now run it again and it should execute successfully.

Our next step will be to write this XML to a file. Add a Script Task to the package,double click the Script Task,click on script and type XMLOutput into the property of ReadWriteVariables. It should look like the image below

Click the Design Script button, this will open up a code window, replace all the code you see with this

  1. ' Microsoft SQL Server Integration Services Script Task
  2. ' Write scripts using Microsoft Visual Basic
  3. ' The ScriptMain class is the entry point of the Script Task.
  4. Imports System
  5. Imports System.Data
  6. Imports System.Math
  7. Imports Microsoft.SqlServer.Dts.Runtime
  8. Public Class ScriptMain
  9. Public Sub Main()
  10. '
  11. ' Add your code here
  12. '
  13. Dim XMLString As String = " "
  14. XMLString = Dts.Variables("XMLOutput").Value.ToString.Replace("<ROOT>", "").Replace("</ROOT>", "")
  15. XMLString = "<?xml version=""1.0"" ?>" + XMLString
  16. GenerateXmlFile("C:\\MusicCollection.xml", XMLString)
  17. End Sub
  18. Public Sub GenerateXmlFile(ByVal filePath As String, ByVal fileContents As String)
  19. Dim objStreamWriter As IO.StreamWriter
  20. Try
  21. objStreamWriter = New IO.StreamWriter(filePath)
  22. objStreamWriter.Write(fileContents)
  23. objStreamWriter.Close()
  24. Catch Excep As Exception
  25. MsgBox(Excep.Message)
  26. End Try
  27. Dts.TaskResult = Dts.Results.Success
  28. End Sub
  29. End Class
 

SSIS 2008 requires a code change Here is what the code should look like if you are running SSIS 2008

  1. ' Microsoft SQL Server Integration Services Script Task
  2. ' Write scripts using Microsoft Visual Basic 2008.
  3. ' The ScriptMain is the entry point class of the script.
  4. Imports System
  5. Imports System.Data
  6. Imports System.Math
  7. Imports Microsoft.SqlServer.Dts.Runtime
  8. <System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _
  9. <System.CLSCompliantAttribute(False)> _
  10. Partial Public Class ScriptMain
  11. Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
  12. Enum ScriptResults
  13. Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
  14. Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
  15. End Enum
  16. Public Sub Main()
  17. '
  18. ' Add your code here
  19. '
  20. Dim XMLString As String = " "
  21. XMLString = Dts.Variables("XMLOutput").Value.ToString.Replace("<ROOT>", "").Replace("</ROOT>", "")
  22. XMLString = "<?xml version=""1.0"" ?>" + XMLString
  23. GenerateXmlFile("C:\\MusicCollection.xml", XMLString)
  24. End Sub
  25. Public Sub GenerateXmlFile(ByVal filePath As String, ByVal fileContents As String)
  26. Dim objStreamWriter As IO.StreamWriter
  27. Try
  28. objStreamWriter = New IO.StreamWriter(filePath)
  29. objStreamWriter.Write(fileContents)
  30. objStreamWriter.Close()
  31. Catch Excep As Exception
  32. MsgBox(Excep.Message)
  33. End Try
  34. Dts.TaskResult = ScriptResults.Success
  35. End Sub
  36. End Class
 

There are a couple of things you need to know, the XML will be generated inside a <ROOT> tag, I am stripping that out on line 23 of the code, on line 24 I am adding <?xml version="1.0" ?> to the file. Line 26 has the location where the file will be written, right now it is C:\MusicCollection.xml but you can modify that.

So now we are all done with this. It is time to run this package. Run the package and you should see that file has been created.

Create XML Files Out Of SQL Server With SSIS And FOR XML Syntax的更多相关文章

  1. SQL Server 2008中如何为XML字段建立索引

    from:http://blog.csdn.net/tjvictor/article/details/4370771 SQL Server中的XML索引分为两类:主XML 索引和辅助XML索引.其中辅 ...

  2. 在SQL Server中将数据导出为XML和Json

        有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做 ...

  3. 微软BI 之SSIS 系列 - 两种将 SQL Server 数据库数据输出成 XML 文件的方法

    开篇介绍 在 SSIS 中并没有直接提供从数据源到 XML 的转换输出,Destination 的输出对象有 Excel File, Flat File, Database 等,但是并没有直接提供 X ...

  4. Create maintenance backup plan in SQL Server 2008 R2 using the wizard

    You will need to identify how you want your maintenance plan to be setup. In this example the mainte ...

  5. SQL SERVER 原来还可以这样玩 FOR XML PATH

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

  6. SQL Server 将数据导出为XML和Json

    有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做,而SQ ...

  7. Sql Server 部署SSIS包完成远程数据传输

    本篇介绍如何使用SSIS和作业完成自动更新目标数据任务. ** 温馨提示:如需转载本文,请注明内容出处.** 本文链接:https://www.cnblogs.com/grom/p/9018978.h ...

  8. SQL Server 2008 R2——使用FOR XML PATH实现多条信息按指定格式在一行显示

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

  9. SQL SERVER与SSIS 数据类型对应关系

随机推荐

  1. ubuntu 系统提示升级失败,boot空间不足

    系统提示升级失败,boot空间不足,解决方法: linux 随着系统的升级,会自动攒下好几个内核 执行 uname -a 看下自己当前启动的是哪个内核 dpkg --get-selections |g ...

  2. Java I/O学习

    转载: Java I/O学习 一.Java I/O类结构以及流的基本概念 在阅读Java I/O的实例之前我们必须清楚一些概念,我们先看看Java I/O的类结构图: Java I/O主要以流的形式进 ...

  3. String 字符串补0

    method1: 前提是你的长度已经确定!比如规定现实10位! - 优点: 不需要都是数字类型    String str_m =  "123X";  String str =&q ...

  4. [BZOJ4009][HNOI2015]接水果(整体二分)

    [HNOI2015]接水果 时间限制:60s      空间限制:512MB 题目描述 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC 了The b ...

  5. 数位dp小结以及模板

    这里是网址 别人的高一啊QAQ.... 嗯一般记忆化搜索是比递推好写的所以我写的都是dfs嗯......(因为我找不到规律啊摔,还是太菜.....) 显然这个东西的条件是非常的有套路..但是不管怎么样 ...

  6. 【hash】BZOJ3751-[NOIP2014]解方程

    [题目大意] 已知多项式方程:a0+a1*x+a2*x^2+...+an*x^n=0.求这个方程在[1,m]内的整数解(n和m均为正整数). [思路] *当年考场上怒打300+行高精度,然而没骗到多少 ...

  7. 压测工具Webbench

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,安装使用也特别方便,并且非常小. 1.系统:Linux 2.编译安装: [root@~]$wget http://blog.s135.c ...

  8. 初学Hadoop:利用VMWare+CentOS7搭建Hadoop集群

     一.前言 开始学习数据处理相关的知识了,第一步是搭建一个Hadoop集群.搭建一个分布式集群需要多台电脑,在此我选择采用VMWare+CentOS7搭建一个三台虚拟机组成的Hadoop集群. 注:1 ...

  9. ACM -- 算法小结(五)字符串算法之Sunday算法

    1. Sunday算法是Daniel M.Sunday于1990年提出的一种比BM算法搜索速度更快的算法. 2. Sunday算法其实思想跟BM算法很相似,只不过Sunday算法是从前往后匹配, 在匹 ...

  10. MySQL之thread cache

    最近突然对MySQL的连接非常感兴趣,从status根据thread关键字可以查出如下是个状态 show global status like 'thread%'; +---------------- ...