【问题标题】:Powershell SQL query not properly exporting to CSV?Powershell SQL 查询未正确导出到 CSV?
【发布时间】:2019-09-09 03:24:15
【问题描述】:

我需要从表中的几列中检索数据行。

我需要自动化这个。

我决定使用批处理文件。

我一直在运行的命令是。

osql -S .\sqlexpress -E -i "C:\Users\user.name\Desktop\eventdatetime24hr.sql" -o "C:\Users\user.name\Desktop\queryOut.csv"

它产生如下所示的输出:

图片:

https://aws1.discourse-cdn.com/business6/uploads/sqlteam/original/2X/9/98ed243059c8a3e9ad61a25a441086785932c3c9.png

如您所见,输出看起来很糟糕。

我需要将它输入另一个应用程序,但是,我只能这样做,因为每列和每行数据都有一个单独的单元格。

我不知道该怎么做,有人可以帮忙吗?

列是:eventdatetime、eventid、sNarrative

【问题讨论】:

  • 您可以尝试SQLPS PowerShell 模块进行查询,它提供对象作为输出,同样可以使用Export-CSV cmdlet 导出到CSV
  • 我试过了,但我不明白
  • 您在使用SQLPS 时遇到了什么问题?

标签: sql sql-server excel powershell csv


【解决方案1】:

首先,osql 已被弃用,并且可能会在 SQL Server 的未来版本中被删除。考虑将sqlcmd 用于命令行使用,或使用本机Powershell 命令,例如Invoke-SqlCmd 甚至dbatools

您得到的结果很可能是由不适当的列分隔符引起的。在 CSV 文件中,逗号 , 通常用作列分隔符。问题是经常。在几个非美国语言环境中,分隔符是别的东西。制表符和分号 ; 是流行的替代方法。

电子表格应用程序使用的分隔符与文件包含的分隔符不同。因此,它不理解将内容拆分为单独的列。要解决此问题,请使用默认分隔符创建文件或告诉电子表格使用替代分隔符。

要更改分隔符,请使用another an answer中描述的语法:

:: cmd
sqlcmd -S ServerName -E -Q"select * from mytable" -s"   " -o results.txt
# Powershell
sqlcmd -S ServerName -E -Q"select * from mytable" -s `"`t`" -o results.txt

电子表格可能具有诸如 Excel 的“文本到列”或“导入文本向导”之类的功能。使用任一导入文档并选择正确的分隔符。要查看它到底是什么,请先在记事本中打开文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2017-02-27
    • 1970-01-01
    • 2021-03-31
    • 2015-04-28
    • 2018-01-05
    • 2018-04-16
    相关资源
    最近更新 更多