如何将查询结果导出到SQL Server 2008中的.csv文件?
如何将查询结果导出到SQL Server 2008中的.csv文件?
Answers:
这会将查询结果显示为逗号分隔的文本。
要将查询结果保存到文件:Ctrl + Shift + F
Ctrl+Shift+F
,它仅更改输出模式,如果您已经运行查询,则不会影响结果。为了体现这一点,您必须重新运行查询。当您在“结果到文件”模式下运行它时,它会提示您输入要保存结果的位置。
我知道这有点老了,但这是一个更简单的方法...
使用默认设置运行查询(以网格格式显示结果,如果不是网格格式,请参见下文)
右键单击网格结果,然后单击“将结果另存为”并保存。
如果结果不是网格格式,请在写查询的位置单击鼠标右键,将鼠标悬停在“结果到”上,然后单击“结果到网格”
请注意,您不会捕获列标题!
祝好运!
您可以使用PowerShell
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
和Add-PSSnapin SqlServerProviderSnapin100
。
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
但不需要管理这些Cmdlet)。另外,我将命令保存在脚本中,直到更改执行策略:,脚本才会运行Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
。
RemoteSigned
执行策略就足够了。
如果所讨论的数据库是本地数据库,则以下可能是将查询结果导出到CSV文件的最可靠的方法(即,为您提供最大的控制权)。
经过详尽的此过程后,我发现以下是最佳选择
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
基于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命令let的功能。
使用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文件的第一行是所有字段的分隔列表。
如果您的值包含逗号,则无法使用本机SQL Server Management Studio技术导出为CSV(建议使用@ 8kb),因为SSMS不会将值用双引号引起来。对我有用的一种更可靠的方法是简单地复制结果(在网格内单击,然后按CTRL-A,CTRL-C)并将其粘贴到Excel中。然后从Excel保存为CSV文件。
您可以使用QueryToDoc(http://www.querytodoc.com)。它使您可以针对SQL数据库编写查询,并在选择定界符之后将结果导出到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 Quoted是正确的。
一种需要1>文件已包含在列中2>一种需要安装Office
面临的错误
消息7303,级别16,状态1,行1无法为链接服务器“(空)”初始化OLE DB提供程序“ Microsoft.ACE.OLEDB.12.0”的数据源对象。
消息15281,级别16,状态1,第1行SQL Server阻止访问组件“ Ad Hoc Distributed Queries”的状态“ OpenRowset / OpenDatasource”,因为此服务器的安全配置已将其关闭。系统管理员可以通过使用sp_configure启用“临时分布式查询”的使用。有关启用“临时分布式查询”的更多信息,请在SQL Server联机丛书中搜索“临时分布式查询”。
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
如果您不想使用Powershell,则此答案是8kb最佳答案的一种变体。唯一的区别是,不是选择CSV作为输出格式,而是选择“制表符分隔”。这样,如果您的数据中有逗号,它将不会跳过Excel中的单元格。另外,如果将Excel的默认定界符设置为制表符,则只需复制所有SSMS查询结果(CTRL-A,CTRL-C)并粘贴到Excel(无需另存为文件并导入到Excel ):
现在您可以执行查询,然后按CTRL-A选择所有结果,然后按CTRL-C复制到剪贴板,然后切换到Excel 2013(不确定2007年也可以)并粘贴-假设Excel默认分隔符设置为制表符。
是的,当您直接访问服务器时,所有这些都是可能的。但是,如果您只能从Web /应用程序服务器访问服务器,该怎么办?好吧,这种情况早就发生了,解决方案是将SQL Server Export to CSV。