从SQL Server 2008生成XML文件

Pra*_*nna 7 xml sql sql-server sql-server-2008

我正在开发一个应用程序,我需要将SQL响应作为XML获取到XML文件中(并将其存储在某个物理位置,例如c:\ xyz.xml).

我可以使用SQL Server中提供的规定生成XML内容,如下所示.

 SELECT * FROM @Table FOR XML AUTO, ELEMENTS
Run Code Online (Sandbox Code Playgroud)

其中:@Table是一个表变量.

我想知道如何将查询输出存储到SQL Server本身的XML文件中.

Nik*_* G. 8

还有一个选项 - 使用sqlcmd工具.

  1. :XML ON在SQL文件中添加第一行(我们称之为input.sql)
  2. 这样的命令可以解决这个问题:
sqlcmd -S <your-server> -i input.sql -o output.xml
Run Code Online (Sandbox Code Playgroud)


Gau*_*sie 5

您需要以下列方式使用xp_cmdshellbcp实用程序

EXEC xp_cmdshell 'bcp "SELECT * FROM @Table FOR XML AUTO, ELEMENTS" queryout "C:\table.xml" -c -T'
Run Code Online (Sandbox Code Playgroud)

如果您有任何问题或希望了解更多有关其工作原理的信息,请在评论中回复我.


Rem*_*anu 5

您无法从SQL Server本身写入文件系统.至少不那么容易.有三种选择:

  • xp_cmdshell.我强烈建议不要这样做.默认情况下xp_cmdshell,出于安全目的而禁用,并且仅为此操作启用它会打开一种方法来解决系统中的大安全问题.

  • 使用FileSystemObject和OLE自动化程序sp_OACreate/ sp_OAMethod.请参阅使用T-SQL在SQL Server中读取和写入文件.这虽然略微优于xp_cmdshell选项,但它并没有提供更好的安全性故事.唯一的原因是比xp_cmdshell更好的是黑客知道这一点.但是,默认情况下,SQL Server中的OLE自动化过程选项也被禁用,启用此选项会暴露xp_cmdshell具有的相同安全问题.

  • 使用CLR程序.这是我的建议.使用数字签名创建程序集,使用程序集签名允许通过Transact-SQL代码签名,EXTERNAL ACCESS,然后使用CLR过程将XML写入文件系统.虽然这比简单的xp_cmdshell或OLE自动化选项复杂得多,但从安全的角度来看,它是最容易控制和最精细的,并且最容易维护和正确(是.Net代码而不是shell脚本).不幸的是,默认情况下,clr选项也在服务器中禁用,必须启用.


Mar*_*son 0

如果你按

ctrl + shift + f
Run Code Online (Sandbox Code Playgroud)

您将选择“结果到文件”。这可以在 Sql Management Studio 顶部栏的“查询”菜单中找到。

或者将类似的内容放入您的sql脚本中

exec xp_cmdshell 'bcp "select * from suppliers" queryout "c:\suppliers.txt" -S server -T'
Run Code Online (Sandbox Code Playgroud)

这个链接,有一个问题是app的c盘还是sql server的c盘。祝你玩得开心。