2017-08-07 89 views
12

我的SQL查询生成XML输出:生成的KML文件保存到本地驱动器

  select 'TEST.kml' as name, 
       (select 'TEST' as name, (
       select ( 
         select top 10 issue as name, 
         null as description, 
         null as 'Point/coordinates', 
         (
           select 
             null as altitudeMode, 
             Coordinates as 'coordinates' 
           for xml path('Polygon'), type) 
       from Mapping for xml path('Placemark'), type)) 
        for xml path ('Line') , type) 
       for xml path ('Doc'), root('kml')) 

我想查询保存为.XML文件输出到本地drive.Please建议。

+1

重复此问题:[从SQL Server 2008生成XML文件](https://stackoverflow.com/q/1803911/243373)。 –

+0

它缺少一些上下文。什么触发了这个查询?输出给用户下载的Web应用程序?一个预定的作业存储单个查询参数输出到FS?或者是一个穿过一系列参数并为每个参数抓取输出文件的schedeled作业?或者其他的遍历一系列生成单个文件的参数? –

回答

5

不是最优雅的方式,但它可以使用bulk copy programxp_cmdshell来做到这一点。 xp_cmdshell被阻止默认由SQL Server作为安全配置的一部分,所以您需要首先启用它,并且BCP要求您有权访问要创建该文件的目录。

要启用xp_cmdshell你需要运行sp_configureRECONFIGURE,使用此:

EXEC sp_configure'xp_cmdshell', 1 
RECONFIGURE 
GO 
EXEC sp_configure 'show advanced options', 1 
RECONFIGURE 
GO 

然后你可以运行以下命令:

EXEC xp_cmdshell 'bcp "SELECT * FROM [Database].dbo.[Table] FOR XML AUTO, 
ELEMENTS" queryout "C:\test.xml" -c -T' 

只需添加您的查询,并确保你围绕您的表名添加[]

微软文档的xp_cmdshell的是here和bcp可以发现here

3

使用bcp是明确的选择尤其是对于大型数据集时。或者,您可以尝试使用SQL Management Studio - Export Data

  1. 打开界面 - 数据库名称Right Click,然后Tasks,然后Export Data
  2. 菜单被打开。点击Next

    enter image description here

  3. 然后选择SQL Server Native Client,SQL服务器,数据库名称和身份验证方法:

    enter image description here

  4. 又在哪里保存数据:

    enter image description here

  5. 那么我们是如何获得(在你的情况SQL查询)的数据:

    enter image description here

  6. 过去查询:

    enter image description here

  7. 然后我们有一些设置,单击finish

    enter image description here

3

要在远程查询的结果保存到本地文件,你可以使用PowerShell脚本像这样的例子:

$connection = New-Object System.Data.SqlClient.SqlConnection("Data Source=YourServer;Initial Catalog=YourDatabase;Integrated Security=SSPI") 
$command = New-Object System.Data.SqlClient.SqlCommand(@(" 
    select 'TEST.kml' as name, 
       (select 'TEST' as name, (
       select ( 
         select top 10 issue as name, 
         null as description, 
         null as 'Point/coordinates', 
         (
           select 
             null as altitudeMode, 
             Coordinates as 'coordinates' 
           for xml path('Polygon'), type) 
       from Mapping for xml path('Placemark'), type)) 
        for xml path ('Line') , type) 
       for xml path ('Doc'), root('kml');"), $connection); 
$connection.Open(); 
$command.ExecuteScalar() | Out-File -FilePath "C:\KmlFiles\YourFile.kml"; 
$connection.Close(); 

该脚本可以从命令执行通过将脚本保存为扩展名为“.ps1”的文件并使用以下命令来提示:

powershell -ExecutionPolicy RemoteSigned -File "C:\PowershellScripts\ExampleExport.ps1" 

可以使用Windows任务计划任务来自动执行导出来安排此命令。或者,使用带有Powershell或CmdExec步骤的SQL Server代理作业进行安排。

+0

您好我们如何执行这个脚本? – user1046415

+0

@ user1046415,我在我的答案中添加了方法。 –

相关问题