将查询结果导出到SQL Server 2008中的.csv文件

时间:2010-07-02 21:31:46

标签: sql-server-2008

如何将查询结果导出到SQL Server 2008中的.csv文件?

14 个答案:

答案 0 :(得分:155)

  1. 打开SQL Server Management Studio
  2. 转到工具>选项>询问 结果> SQL Server>结果到文本
  3. 在最右边,有一滴 下框称为输出格式
  4. 选择逗号分隔,然后单击确定
  5. Here's a full screen version of that image, below

    enter image description here

    这将以逗号分隔的文本显示您的查询结果。

    要将查询结果保存到文件:Ctrl + Shift + F

答案 1 :(得分:127)

我知道这有点旧,但这是一种更简单的方法......

  1. 使用默认设置运行查询(以网格格式显示结果,如果您的格式不是网格格式,请参阅下文)

  2. 右键点击网格结果,然后点击“将结果另存为”并保存。

  3. 如果您的结果不是网格格式,请右键单击编写查询的位置,将“结果”悬停并点击“结果到网格”

    祝你好运!

答案 2 :(得分:40)

您可以使用PowerShell

$AttachmentPath = "CV File location"
$QueryFmt= "Query"

Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath

答案 3 :(得分:14)

如果有问题的数据库是本地的,以下可能是将查询结果导出到CSV文件的最有效方法(即,为您提供最大的控制权)。

  1. 复制查询。
  2. 在对象资源管理器中,右键单击相关数据库。
  3. 选择"任务" >> "导出数据......"
  4. 配置您的数据源,然后点击"下一步"。
  5. 选择"平面文件"或者" Microsoft Excel"作为目的地。
  6. 指定文件路径。
  7. 如果使用平面文件,请根据需要进行配置。如果使用Microsoft Excel,请选择" Excel 2007" (以前的版本有64k的行限制)
  8. 选择"编写查询以指定要传输的数据"
  9. 从步骤1粘贴查询。
  10. 点击下一步>>审查映射>>点击下一步>>选择"立即运行" >>点击"完成"两次。
  11.   

    在彻底完成这个过程后,我发现以下是最佳选择

    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"
    

答案 4 :(得分:6)

使用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

但是,有几点需要注意:

  1. 您需要提供Microsoft.ACE.OLEDB.12.0提供程序。 Jet 4.0提供程序也可以使用,但它很古老,所以我使用了这个。

  2. .CSV文件必须已经存在。如果您正在使用标题(HDR=YES),请确保.CSV文件的第一行是所有字段的分隔列表。

答案 5 :(得分:5)

在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 命令。

答案 6 :(得分:5)

MS Excel - >数据 - >新查询 - >从数据库..按照步骤

答案 7 :(得分:3)

如果您的值包含逗号,则使用本机SQL Server Management Studio技术导出为CSV(如@ 8kb建议的)不起作用,因为SSMS不会将值换行为双引号。对我有用的更强大的方法是简单地复制结果(在网格内单击然后按CTRL-A,CTRL-C)并将其粘贴到Excel中。然后从Excel保存为CSV文件。

答案 8 :(得分:2)

您可以使用QueryToDoc(http://www.querytodoc.com)。它允许您针对SQL数据库编写查询,并在选择分隔符后将结果导出为Excel,Word,HTML或CSV

答案 9 :(得分:2)

如果你不想使用Powershell,那么这个答案就是对8kb很好的答案的变化。唯一的区别是,不是选择CSV作为输出格式,而是选择Tab Delimited。这样,如果数据中有逗号,则不会跳过Excel中的单元格。此外,如果您将Excel的默认分隔符设置为选项卡,则只需复制所有SSMS查询结果(CTRL-A,CTRL-C)并粘贴到Excel中(无需另存为文件并导入Excel ):

  • 在SSMS中转到工具>选项>查询结果> SQL Server>结果到文本
  • 将最右侧的输出格式更改为制表符分隔
  • 点击确定

现在您可以执行查询,然后执行CTRL-A选择所有结果,然后按CTRL-C复制到剪贴板,然后切换到Excel 2013(也可能在2007年工作,不确定)并粘贴 - 假设Excel的默认分隔符设置为tab。

Image of SSMS Query Options Screen

答案 10 :(得分:1)

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

as @Slogmeister Extraordinaire Quoted是正确的。

需要有 1 GT;文件已经存在列 2 - ;需要安装Office

面临的错误

1

Msg 7303,Level 16,State 1,Line 1 无法初始化OLE DB提供程序的数据源对象" Microsoft.ACE.OLEDB.12.0"对于链接服务器"(null)"。"

64位 http://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine_x64.exe

32位 http://download.microsoft.com/download/f/d/8/fd8c20d8-e38a-48b6-8691-542403b91da1/AccessDatabaseEngine.exe

2

Msg 15281,Level 16,State 1,Line 1 SQL Server阻止访问STATEMENT' OpenRowset / OpenDatasource'组件' Ad Hoc Distributed Queries'因为此组件已作为此服务器的安全配置的一部分关闭。系统管理员可以启用“Ad Hoc Distributed Queries”'通过使用sp_configure。有关启用“即时分布式查询”的详细信息,请搜索“即时分布式查询”和“即时分布式查询”。在SQL Server联机丛书中。

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO

答案 11 :(得分:1)

这里还有一个值得一提的方法:

SQLCMD -S SEVERNAME -E -Q "SELECT COLUMN FROM TABLE" -s "," -o "c:\test.csv"

注意:我看不到任何网络管理员可以让您运行powershell脚本

答案 12 :(得分:0)

是的,当您可以直接访问服务器时,所有这些都是可能的。但是如果您只能从Web /应用程序服务器访问服务器呢?好吧,情况就是我们这么久了,解决方案是 SQL Server Export to CSV

答案 13 :(得分:0)

我希望10年还不算太晚,我在Windows Scheduler中使用了它;

"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE"
-S BLRREPSRVR\SQLEXPRESS -d Reporting_DB -o "C:\Reports\CHP_Gen.csv" -Q "EXEC dbo.CHP_Generation_Report" -W -w 999 -s ","

它将打开sql命令.exe并运行为sql命令设计的脚本。 sql命令脚本非常易于使用,并带有一些Google搜索和反复试验。您会看到它选择了一个数据库,定义了输出位置并执行了一个过程。该过程只是一个查询,用于从数据库的表中选择要显示的行和列。