我在远程数据库上执行以下查询:
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。
答案 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可以完全自动化这个过程。