如何在SQL Server 2008中把查询结果导出到.csv文件?
在SQL Server 2008中导出查询结果到.csv文件
这将显示你的查询结果为以逗号分隔的文本。
要把查询结果保存到一个文件中。Ctrl + Shift + F
Ctrl+Shift+F
,它只改变输出模式,如果你已经运行了查询,它不会影响结果。为了使这一点得到反映,你必须重新运行查询。当你在 "结果到文件 "模式下运行它时,它应该提示你想把结果保存在哪里。
我知道这有点老,但这里有一个更简单的方法......
用默认设置运行你的查询(将结果放在网格格式中,如果你的查询不是网格格式,见下文)
在网格结果上点击右键,点击 "将结果另存为 "并保存。
如果你的结果不是网格格式,右击你写查询的地方,悬停 "结果到 "并点击 "结果到网格"
请注意,你不会捕捉到列的标题!
祝您好运!
你可以使用PowerShell
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
谢谢你!"。这是唯一对我有用的建议。正确处理逃逸问题
Eric J.
:
如果我可以的话,+10。 唯一能处理转义的答案。 为了使其运行,我不得不在脚本的顶部添加两行:
Add-PSSnapin SqlServerCmdletSnapin100
和
Add-PSSnapin SqlServerProviderSnapin100
。
Tilo
:
如果你面临超时,请添加
querytimeout
,例如
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
作为Powershell的新手,我需要安装SqlServer模块。
Install-Module -Name SqlServer
(但不需要在这些Cmdlets中设置)。另外,我把这些命令保存在一个脚本中,在我改变执行策略之前,这个脚本不会运行:
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
。
@sandyscott 我也是一个Powershell新手,所以谢谢你。总之我认为在这种情况下,
RemoteSigned
执行策略就足够了。
pim
发布于
2016-06-12
0
人赞同
如果有关的数据库是本地的,以下可能是将查询结果导出到
CSV
文件的最有力的方法(也就是说,给你最多的控制权)。
复制查询。
在对象资源管理器中,右击有关的数据库。
选择 "任务">>"导出数据..."
配置你的数据源,然后点击 "下一步"。
选择 "平面文件 "或 "Microsoft Excel "作为目的地。
指定一个文件路径。
如果使用平面文件,根据需要进行配置。如果使用Microsoft Excel,选择 "Excel 2007"(以前的版本有64k的行数限制)。
选择 "写一个查询以指定要传输的数据"
粘贴步骤1的查询。
点击下一步>>查看映射>>点击下一步>>选择 "立即运行">>点击 "完成 "两次。
在详尽地经历了这个过程后,我发现以下是最好的选择
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"
Slogmeister Extraordinaire
发布于
2016-06-12
0
人赞同
使用
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文件的第一行是所有字段的分隔列表。
BeowulfNode42
发布于
2016-06-12
0
人赞同
在N.S的回答的基础上,我有一个PowerShell脚本,可以导出到
CSV
文件,在字段周围加上引号,并以逗号分隔,它跳过文件中的头信息。
add-pssnapin sqlserverprovidersnapin100
add-pssnapin sqlservercmdletsnapin100
$qry = @"
Select
tablename
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $qry | convertto-CSV -notype | select -skip 1 > "full path and filename.csv"
前两行启用了使用Invoke-SqlCmd命令-let的能力。
Johnny Oshika
发布于
2016-06-12
0
人赞同
如果你的数值包含逗号,使用本地的SQL Server Management Studio技术导出CSV(如@8kb建议的那样)是行不通的,因为SSMS不会用双引号包裹数值。 对我来说,一个更强大的方法是简单地复制结果(点击网格内,然后CTRL-A,CTRL-C)并将其粘贴到Excel。 然后从Excel中保存为CSV文件。
Robert
发布于
2016-06-12
0
人赞同
你可以使用QueryToDoc
(http://www.querytodoc.com)
。它可以让你写一个针对SQL数据库的查询,并将结果--在你选择分隔符之后--导出到Excel、Word、HTML或CSV中。
sam
发布于
2016-06-12
0
人赞同
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
面临的错误
Msg 7303, Level 16, State 1, Line 1
不能为链接的服务器"(null) "初始化OLE DB提供者 "Microsoft.ACE.OLEDB.12.0 "的数据源对象。"
http://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine_x64.exe
http://download.microsoft.com/download/f/d/8/fd8c20d8-e38a-48b6-8691-542403b91da1/AccessDatabaseEngine.exe
Msg 15281, Level 16, State 1, Line 1
SQL Server阻止了对组件 "Ad Hoc Distributed Queries "的STATEMENT "OpenRowset/OpenDatasource "的访问,因为该组件在该服务器的安全配置中被关闭。系统管理员可以通过使用sp_configure启用 "Ad Hoc Distributed Queries "的使用。关于启用 "Ad Hoc Distributed Queries "的更多信息,请在SQL Server Books Online搜索 "Ad Hoc Distributed Queries"。
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
TomWalker
发布于
2016-06-12
0
人赞同
如果你不想使用Powershell,这个答案是对8kb伟大答案的一个变种。唯一的区别是,不要选择CSV作为输出格式,而要选择Tab Delimited。这样,如果你的数据中有逗号,它就不会在Excel中跳过单元格。另外,如果你将Excel的默认分隔符设置为制表符,你可以简单地将SSMS的查询结果全部复制(CTRL-A,CTRL-C)并粘贴到Excel中(不需要保存为文件并导入到Excel)。
在SSMS中,进入工具 > 选项 > 查询结果 > SQL Server > 结果到文本
将最右边的输出格式改为
Tab Delimited
现在你可以执行你的查询,然后用CTRL-A选择所有的结果,然后用CTRL-C复制到剪贴板,然后切换到Excel 2013(可能也适用于2007,不确定)并粘贴--假设Excel的默认分隔符被设置为制表符。
Ayaz Hoda
发布于
2016-06-12
0
人赞同
这里还有一个值得一提的方法。
SQLCMD -S SEVERNAME -E -Q "SELECT COLUMN FROM TABLE" -s "," -o "c:\test.csv"
注意:我没有看到任何网络管理员让你运行 powershell 脚本。
mtone
:
顺便说一下,这个答案已经在
stackoverflow.com/questions/425379/
的 "可能的重复 "链接中得到了更详细的讨论。
Ronan
发布于
2016-06-12
0
人赞同
我希望10年不会太晚,我在Windows Scheduler中使用这个。
"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE"