将查询结果导出到SQL Server 2008中的.csv文件
如何将查询结果导出到SQL Server 2008中的.csv文件?
- 打开SQL Server Management Studio
- 转到工具>选项>查询结果> SQL Server>结果到文本
- 在最右边,有一个名为输出格式的下拉框
- select逗号分隔,然后单击确定
下面是该图片的全屏版本
这会将查询结果显示为以逗号分隔的文本。
将查询结果保存到文件:Ctrl + Shift + F
我知道这是有点旧,但这是一个更简单的方法…
-
运行你的查询默认设置(把结果以网格格式,如果你的网格格式,请参阅下面)
-
右键单击网格结果,然后单击“另存结果为”并保存。
如果您的结果不是网格格式,请右键单击您在其中编写查询的位置,将“结果到”hover,然后单击“结果到网格”
祝你好运!
您可以使用PowerShell
$AttachmentPath = "CV File location" $QueryFmt= "Query" Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
如果有问题的数据库是本地数据库,则以下可能是将查询结果导出到CSV文件(即给予最大控制权)的最可靠方法。
- 复制查询。
- 在对象资源pipe理器中,右键点击相关数据库。
- select“任务”>>“导出数据…”
- configuration你的数据源,然后点击“下一步”。
- select“平面文件”或“Microsoft Excel”作为目的地。
- 指定一个文件path。
- 如果使用平面文件,请根据需要进行configuration。 如果使用Microsoft Excel,请select“Excel 2007”(先前版本的行数限制为64k)
- select“写入查询来指定要传输的数据”
- 粘贴来自步骤1的查询。
- 点击下一步>>查看映射>>点击下一步>>select“立即运行”>>点击“完成”两次。
经过这个过程详尽的,我发现以下是最好的select
PowerShell脚本
$dbname = "**YOUR_DB_NAME_WITHOUT_STARS**" $AttachmentPath = "c:\\export.csv" $QueryFmt= @" **YOUR_QUERY_WITHOUT_STARS** "@ Invoke-Sqlcmd -ServerInstance **SERVER_NAME_WITHOUT_STARS** -Database $dbname -Query $QueryFmt | Export-CSV $AttachmentPath -NoTypeInformation
以pipe理员身份运行PowerShell
& "c:\path_to_your_ps1_file.ps1"
使用T-SQL :
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]') SELECT Field1, Field2, Field3 FROM DatabaseName
但是,有几个警告:
-
您需要有Microsoft.ACE.OLEDB.12.0提供程序可用。 Jet 4.0提供者也可以工作,但是很古老,所以我使用了这个。
-
.CSV文件必须已经存在。 如果您使用标题(
HDR=YES
),请确保.CSV文件的第一行是所有字段的分隔列表。
build立在NS的答案,我有一个PowerShell脚本导出到一个CSV文件,引号周围的字段和逗号分隔,它跳过文件中的标题信息。
add-pssnapin sqlserverprovidersnapin100 add-pssnapin sqlservercmdletsnapin100 $qry = @" Select * From tablename "@ Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $qry | convertto-CSV -notype | select -skip 1 > "full path and filename.csv"
前两行允许使用Invoke-SqlCmd命令的function。
如果您的值包含逗号,则使用本机SQL Server Management Studio技术导出为CSV(如@ 8kbbuild议)不起作用,因为SSMS不会将值用双引号括起来。 一个更强大的方法,我只是简单地复制结果(点击网格内,然后CTRL-A,CTRL-C),并将其粘贴到Excel中。 然后从Excel中保存为CSV文件。
MS Excel的 – >数据 – >新的查询 – >从数据库..下面的步骤
你可以使用QueryToDoc( http://www.querytodoc.com )。 它使您可以针对SQL数据库编写查询,并在您select分隔符后将结果导出为Excel,Word,HTML或CSV
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]') SELECT Field1, Field2, Field3 FROM DatabaseName
作为@Slogmeister Extraordinaire引用是正确的。
一个需要有1>文件已经出现列2>一个需要安装Office
面临的错误
1
Msg 7303,级别16,状态1,行1无法初始化链接服务器“(null)”的OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象。
2
消息15281,级别16,状态1,行1 SQL Server阻止访问组件“Ad Hoc分布式查询”的STATEMENT“OpenRowset / OpenDatasource”,因为此组件作为此服务器的安全configuration的一部分被closures。 系统pipe理员可以使用sp_configure启用“Ad Hoc Distributed Queries”。 有关启用“Ad Hoc分布式查询”的更多信息,请在SQL Server联机丛书中search“Ad Hoc Distributed Queries”。
EXEC sp_configure 'show advanced options', 1 RECONFIGURE GO EXEC sp_configure 'ad hoc distributed queries', 0 RECONFIGURE GO
是的,当你直接访问服务器时,所有这些都是可能的。 但是如果您只能从Web /应用程序服务器访问服务器呢? 那么,情况是这样,我们早已回到了,解决scheme是SQL Server导出到CSV 。
如果你不想使用Powershell,这个答案是8kb的一个很好的答案。 唯一的区别是,不是selectCSV作为输出格式,而是select制表符分隔符。 这样,如果数据中有逗号,它将不会跳过Excel中的单元格。 此外,如果您将Excel的默认分隔符设置为制表符,则可以简单地复制所有SSMS查询结果(CTRL-A,CTRL-C)并粘贴到Excel中(无需另存为文件并导入到Excel ):
- 在SSMS中,转到工具>选项>查询结果> SQL Server>结果到文本
- 将输出格式更改为制表符分隔符
- 点击OK
现在你可以执行你的查询,然后做一个CTRL-Aselect所有的结果,然后CTRL-C复制到剪贴板,然后切换到Excel 2013(也可以在2007年工作,不知道)并粘贴 – 假设Excel的默认分隔符设置为选项卡。
SSMS查询选项屏幕的图像