如何在SQL Server 2008中将查询结果导出为.csv文件?
如何在SQL Server 2008中将查询结果导出为.csv文件?
这将以逗号分隔的文本形式显示您的查询结果。
如果要将查询结果保存到文件中:按下 Ctrl + Shift + F。
Ctrl+Shift+F
时,它只会更改输出模式,不会影响查询结果,如果你已经运行了查询。要使其生效,需要重新运行查询。当你在“将结果保存到文件”模式下运行查询时,它应该提示你想要保存结果的位置。 - qJake我知道这有点老了,但这里有一种更简单的方法...
使用默认设置运行查询(结果以网格格式显示,如果结果不在网格格式中,请参见下面)
右键单击网格结果,然后单击“另存为”并保存。
如果您的结果不在网格格式中,请右键单击写查询的位置,悬停在“Results To”上,然后单击“Results To Grid”
请注意,您不会捕获列标题!
祝你好运!
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
和 Add-PSSnapin SqlServerProviderSnapin100
。 - Eric J.Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
。 - TiloInstall-Module -Name SqlServer
(但不需要插入那些 Cmdlets)。此外,我将命令保存在脚本中,但在运行之前需要更改执行策略:Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
。 - sandyscottRemoteSigned
执行策略就足够了。 - BigBother经过详尽的研究后,我发现以下是最佳选项
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
以管理员身份运行 PowerShell
& "c:\path_to_your_ps1_file.ps1"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
。 - Tilo使用 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文件的第一行是所有字段的分隔列表。
在N.S的回答基础上,我有一个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命令。
微软Excel -> 数据 -> 新查询 -> 从数据库 ..按照步骤进行操作
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 Quoted所述是正确的。
需要具备以下条件: 1> 已经存在包含列的文件 2> 必须安装Office
面临的错误
Msg 7303,Level 16,State 1,Line 1 无法初始化OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象,用于链接服务器“(null)”。
Msg 15281,Level 16,State 1,Line 1 SQL Server阻止对组件“Ad Hoc分布式查询”的语句'OpenRowset / OpenDatasource'的访问,因为此组件已关闭作为该服务器的安全配置的一部分。系统管理员可以使用sp_configure启用对“Ad Hoc分布式查询”的使用。有关启用“Ad Hoc分布式查询”的更多信息,请在SQL Server Books Online中搜索“Ad Hoc分布式查询”。
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
使用原生的SQL Server管理工具导出CSV文件(正如@8kb所建议的那样),如果您的数值包含逗号,则无法正常工作,因为SSMS不会将值用双引号括起来。对我而言更加稳健的方法是,简单地复制结果(在网格中单击,然后CTRL-A、 CTRL-C),并将其粘贴到Excel中。然后从Excel中另存为CSV文件。