从SQL查询生成的KML文件保存到本地驱动器

时间:2017-08-07 20:20:24

标签: sql sql-server xml sql-server-2008 kml

我的SQL查询生成XML输出:

         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文件到本地驱动器。请指教。

3 个答案:

答案 0 :(得分:5)

不是最优雅的方式,但可以使用bulk copy programxp_cmdshell来执行此操作。 SQL Server作为安全配置的一部分默认为xp_cmdshell 阻止,因此您需要首先启用该功能,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的 Microsoft文档here,可以找到bcp here

答案 1 :(得分: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 server,数据库名称和身份验证方法:

    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

答案 2 :(得分: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代理作业进行计划。