如何使用SQL Server从远程数据库导出查询结果为CSV?

时间:2017-04-05 23:21:09

标签: sql-server tsql csv linked-server

我在远程数据库上执行以下查询:

DECLARE @SQL varchar(max) = 
'SELECT ts, value
   FROM history
  WHERE name = ''SOME_ID''

EXEC (@SQL) AT SOME_LINKED_SERVER

所以预期的输出是这样的:

ts       value
----------------
ts1     value1
ts2     value2
…      …

我正在为近100个不同的名称进行此查询,并且愿意为每个输出保存不同的CSV。我知道我可以通过单击查询输出上的右键并选择“将结果另存为...”来手动完成,但这需要太长时间,特别是因为每个查询大约需要10分钟才能完成。

所以我想自动执行此操作,使程序在获取数据后导出所有不同的CSV。我的想法是通过一系列名称循环搜索,执行查询并将输出导出为CSV。

我该怎么做?在尝试循环遍历数组之前,我已经在努力为单个查询结果输出CSV。

1 个答案:

答案 0 :(得分:0)

为什么一次只能使用一个名称:

SELECT [ts], [value], [name]
FROM [SOME_LINKED_SERVER].[database_name].[dbo].[history] H (NOLOCK)
WHERE [name] IN (<name list>)

如果要将结果存储在本地端,请将数据插入本地表并使用其中的数据。像这样:

SELECT [ts], [value], [name]
INTO [local_history]
FROM [SOME_LINKED_SERVER].[database_name].[dbo].[history] H (NOLOCK)
WHERE [name] IN (<name list>)

SELECT * FROM [local_history] -- WHERE [name] = 'SOME_ID'

然后导出,或者使用“将结果另存为...”,或者将结果复制并粘贴到Excel中,然后执行另存为...(F12)。

更好:如果您安装了SSIS,请使用它来构建运行查询的程序包,并为您执行导出。如果归结为SSIS,SSIS甚至可以遍历名称列表。如果您没有安装SSIS,请安装它,它随SQL Server一起提供。 SSIS可以完全自动化这个过程。