在SQL Server Management Studio中是否有与SELECT ... INTO OUTFILE等效的功能?

15 浏览
0 Comments

在SQL Server Management Studio中是否有与SELECT ... INTO OUTFILE等效的功能?

MySQL有一个很方便的命令SELECT ... INTO OUTFILE,可以将结果集写入文件(CSV格式或其他可选格式)。

我目前正在使用SQL Server Management Studio查询一个MS-SQL后端服务器。我有多个SQL查询,并希望将输出结果集写入文件。有没有办法将查询结果直接存储到文件中?

0
0 Comments

在SQL Server Management Studio中,我们可以使用"Query"菜单项下的"Results to"和"Results to File"来将查询结果输出到文件中。快捷键是CTRL+shift+F。我们还可以在全局设置中更改默认的输出路径。点击"Tools",然后选择"Options",在弹出的窗口中选择"Query Results",再选择"SQL Server",可以在"Default destination"下拉菜单中设置默认的输出路径。

另外,在SSMS中,我们还可以使用"Query"菜单项下的"SQLCMD"模式来运行类似命令行的操作。下面是一个在SSMS 2008中的快速测试:

:OUT c:\foo.txt
SELECT * FROM sys.objects

如果我们想要直接通过查询来实现这个功能,可以在查询窗口中加入如下代码:

:OUT c:\foo.txt
SET NOCOUNT ON;SELECT * FROM sys.objects

感谢回复,我实际上是希望能够通过查询直接实现这个功能。因为我有多个查询,当我执行批量查询时,上一个查询的结果会被堆叠起来。

非常聪明!这个方法非常好用。只有一个小小的请求:能否将分隔符指定为逗号,而不是使用默认的格式化方式?我的一些值中包含空格,所以默认的格式会让我的解析器变得非常复杂。

在SSMS中,我们可以通过点击"Tools",然后选择"Options",再选择"Results to text",在弹出的窗口中可以找到"Custom delimiter"选项,只对新的查询窗口生效(我在尝试之后编辑了这个评论)。

非常好,但是如何去掉最后的"XX rows affected"呢?在"results to text"中似乎没有这个选项。

在SELECT语句之前加上"SET NOCOUNT ON;"即可。

谢谢你的回答。但是有一件事情真的很让我烦恼,就是我无法在同一个脚本中交叉使用多个":OUT"语句和查询语句。如果我运行整个脚本,所有的结果都会被导出到同一个文件中。这是一种非常愚蠢的解析方式吗?它首先解析所有的":OUT"语句(将它们全部合并在一起),然后再运行查询吗?

你需要在每个文件之间使用"GO"语句。

如果输出的结果超过一定的长度,它只会输出到这个长度。我遇到了这个问题。

好的提示,既然你已经给出了进入文件模式的快捷键,那么给进入网格模式和文本模式的快捷键也是很好的,网格模式是CTRL+D,文本模式是CTRL+T。

关于SQLCMD的更多详细信息可以在这里找到。

错误的答案。应该警告用户SQL Server Management Studio以截断列在256个字符处而臭名昭著;至少在旧版本中是如此。除非您确定查询中的所有文本字段都很短,否则不要尝试使用这种方法。您可以通过在查询窗口中点击"Query",然后选择"Query Options",再选择"Results",然后更改"Maximum number of characters displayed in each column"来更改此设置。

0
0 Comments

问题的原因是用户想在SQL Server Management Studio中执行类似于MySQL中SELECT ... INTO OUTFILE的语句,将查询结果保存到文件中。但在SQL Server Management Studio中,没有直接的等效方法来实现这个功能。

解决方法有两种:

1. 可以在查询结果网格上右键点击,选择“另存为...”,然后保存结果到文件中。

2. 在工具栏上切换到“结果为文本”按钮。每次运行查询时,都会提示输入文件名。

如果需要自动化这个过程,可以使用bcp工具。用户可以使用以下命令来使用bcp工具将SQL查询的结果保存到文件中:

bcp "SELECT Name, GroupName FROM HumanResources.Department" queryout c:\department.txt -c –T

需要注意的是,如果查询结果中有任何列超过256个字符,不要使用SSMS的方法保存结果,因为它会自动截断超过256个字符的列。可以通过更改查询选项中的设置来解决这个问题,具体方法是在菜单中选择“查询”->“查询选项”->“结果”->“文本”,然后更改“每列显示的最大字符数”。

0