在SQL Server Management Studio中是否有与SELECT ... INTO OUTFILE等效的功能?
在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"来更改此设置。
问题的原因是用户想在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个字符的列。可以通过更改查询选项中的设置来解决这个问题,具体方法是在菜单中选择“查询”->“查询选项”->“结果”->“文本”,然后更改“每列显示的最大字符数”。