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

Gol*_*old 130 sql-server-2008

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

8kb*_*8kb 159

  1. 打开SQL Server Management Studio
  2. 转到工具>选项>查询结果> SQL Server>结果到文本
  3. 在最右边,有一个名为输出格式的下拉框
  4. 选择"逗号分隔",然后单击"确定"

这是该图像的全屏版本,如下所示

在此输入图像描述

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

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

  • 重新运行查询对我来说还不够.我不得不关闭查询窗口,打开一个新窗口,然后再次运行查询. (40认同)
  • 答案有点误导......当你按下`Ctrl + Shift + F`时,它只会改变输出模式,如果你已经运行了查询,它不会影响结果.为了反映这一点,您必须重新运行查询.在"结果到文件"模式下运行它时,它会提示您要保存结果的位置. (9认同)
  • 应该转到工具>选项>查询结果>**SQL Server**>结果到文本 (3认同)
  • 确认@Breandán评论.新设置将不适用于当前打开的查询窗口,必须关闭它们并重新运行查询. (2认同)
  • @Breandán 感谢您的评论,幸运的是我在将笔记本电脑扔到阳台上之前阅读了它。 (2认同)
  • 我必须做的一件事是将其导出为默认的RPT扩展.完成后,您只需将其重命名为CSV即可. (2认同)

Ric*_*tts 131

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

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

  2. 右键单击网格结果,然后单击"将结果另存为"并保存.

如果您的结果不是网格格式,请右键单击编写查询的位置,将"结果转换为"并单击"结果到网格"

祝好运!

  • 令人惊讶的是,即使在SSMS 2012中,这也没有正确引用CSV文本.应引用CHAR/VARCHAR中的逗号或新行,但不是.这会导致数据转移到新列或新行. (10认同)
  • @Don如果进入"查询" - >"查询选项...",网格选项卡,并选中"复制或保存结果时包含列标题",它会给出列标题 (7认同)
  • 这应该是答案. (7认同)
  • 也没有给你列标题. (3认同)

小智 42

您可以使用PowerShell

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

Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Run Code Online (Sandbox Code Playgroud)

  • +10,如果可以的话.只有处理转义的答案.为了让它运行,我不得不在脚本的顶部添加两行:`Add-PSSnapin SqlServerCmdletSnapin100`和`Add-PSSnapin SqlServerProviderSnapin100`. (3认同)
  • 作为 Powershell 新手,我需要安装 SqlServer 模块:“Install-Module -Name SqlServer”(但不需要插入这些 Cmdlet)。另外,我将命令保存在脚本中,在更改执行策略之前该脚本不会运行:“Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser”。 (2认同)
  • 将结果保存到文本时,SSMS 的字符数限制为(仅!)8192 个字符。使用 PowerShell 可以避免这个问题!感谢您的回答。 (2认同)

rob*_*pim 14

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

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

经过彻底的这个过程后,我发现以下是最好的选择

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
Run Code Online (Sandbox Code Playgroud)

以管理员身份运行PowerShell

& "c:\path_to_your_ps1_file.ps1"
Run Code Online (Sandbox Code Playgroud)


Beo*_*e42 6

基于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"
Run Code Online (Sandbox Code Playgroud)

前两行使能够使用Invoke-SqlCmd命令.


Slo*_*ire 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
Run Code Online (Sandbox Code Playgroud)

但是,有几点需要注意:

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

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


tic*_*hra 5

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