SQL Server:将查询导出为.txt文件

14

我正在尝试将SQL Server查询结果导出为一个文件夹中的.txt格式(这是为了自动化工作)。

我知道MySQL中的等效方法是使用INTO OUTFILE。有人知道在SQL Server 2008 Management Studio中实现此功能的最佳方法吗?

SELECT DISTINCT RTRIM (s1.SGMNTID) AS 'AccCode',RTRIM (s1.DSCRIPTN) AS 'CodeDesc', CASE
    WHEN  s1.SGMTNUMB = '1' THEN '1' 
    WHEN s1.SGMTNUMB = '2' THEN '2'
    WHEN s1.SGMTNUMB = '3' THEN '110'
    WHEN s1.SGMTNUMB = '4' THEN '4'
    WHEN s1.SGMTNUMB = '5' THEN '120'
    END AS 'AccountType_id',
CASE WHEN s1.SGMTNUMB = '2' 
THEN LEFT(s1.SGMNTID, 2)
ELSE 'DEFAULT'
END AS 'AccGroupName'

 FROM GL40200 s1

UNION 

SELECT  REPLACE ([ACTNUMBR_1]+'-'+ [ACTNUMBR_2]+'-'+ [ACTNUMBR_3]+'-'+[ACTNUMBR_4]+'-'+    [ACTNUMBR_5],' ', '') AS 'AccCode',
 '' AS 'CodeDesc',
 '0' AS 'AccountType_id',
 'Default' AS 'AccGroupName'
FROM GL00100 a

INTO OUTFILE 'C:\Users\srahmani\verian/myfilename.txt'
6个回答

21

您需要在SSMS应用程序中操作,而不是SQL。

在工具栏上选择:

查询 --> 结果转储 --> 转储到文件

然后执行SQL语句时,它将提示您保存为扩展名为.rpt的文本文件。使用文本编辑器打开结果。


1
那么如果我需要将查询设置为作业,就没有办法在命令行上执行这个操作了吗? - SRahmani
3
可以使用SqlCmd或BCP。公平地说,您询问如何在“SQL Server 2008 Management Studio”中执行此操作。 - D Stanley
那个解决方案似乎有限 - 你需要使用Crystal Reports才能阅读它。 - Steve Staple
1
@SteveStaple 不确定您的意思 - 这只是一个文本文件。 - D Stanley
你可以使用记事本打开文件。 - BinaryJoe01
我认为@SteveStaple的评论是基于这个事实,即它会生成一个.rpt文件(至少在SQL Server 2014中是这样)-但那不是Crystal Reports .rpt文件。这个相关问题的答案包含更多细节:https://dev59.com/5Wkv5IYBdhLWcg3wghIi#36018426 - philipnye

11

另一种方法是通过命令行使用 osql:

OSQL -S SERVERNAME -E -i thequeryfile.sql -o youroutputfile.txt

这可以从BAT文件中使用,并由Windows用户进行安排以进行身份验证。


7
你可以使用bcp实用程序

要将Transact-SQL语句的结果集复制到数据文件中,请使用queryout选项。以下示例将查询结果复制到Contacts.txt数据文件中。该示例假定您正在使用Windows身份验证,并且在运行bcp命令的服务器实例上具有受信任的连接。在Windows命令提示符处,输入:

bcp "<your query here>" queryout Contacts.txt -c -T

您可以通过在SQL Agent作业中直接调用操作系统命令来使用BCP。


7
你可以使用Windows PowerShell执行查询并将其输出到文本文件中。

使用以下命令:

Invoke-Sqlcmd -Query "Select * from 数据库" -ServerInstance "服务器名称\SQL2008" -Database "数据库名称" > c:\Users\输出文件名.txt


0
BCP 实用程序也可以以 .bat 文件的形式使用,但要注意转义序列(例如必须与引号 "" 一起使用)和适当的标签。

.bat 示例:

C:
bcp "\"YOUR_SERVER\".dbo.Proc" queryout C:\FilePath.txt -T -c -q
-- Add PAUSE here if you'd like to see the completed batch

在查询本身包含引号的情况下,必须使用-q选项。

如果需要,BCP也可以运行存储过程。同样要小心:必须在执行之前创建临时表,否则应考虑使用表变量。


是的,BCP可以在存储过程中使用。为了解决这个问题,我使用一个存储过程将数据收集到内存中,然后使用调度程序启动BCP实用程序进行导出。 - SRahmani

-3

这很简单,答案在其他查询中已经提供。对于那些正在查看此内容的人:

select entries from my_entries where id='42' INTO OUTFILE 'bishwas.txt';

1
该命令在MySQL或Oracle中可能是有效的,但在SQL Server中无效。 - SRahmani
好的。谢谢。我不知道那个。 - Bishwas Mishra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接