在不更改数据格式的情况下无法从 SQL 导出为 CSV?

Cannot export to CSV from SQL without changing the format of the data?

提问人:Brute 提问时间:11/15/2023 最后编辑:Brute 更新时间:11/15/2023 访问量:39

问:

我想做的很简单。

我有 PS 脚本,可以从 SQL Server 中提取数据并以 CSV 格式保存输出。 对于列 PartNo,没有定义的格式,因此它无处不在。除了格式为“xxxx-x-x”的值外,大多数值都可以很好地提取为“x\x\xxxx”。

单元格可以在Excel中格式化,但这不起作用,因为这是数据首先显示的方式。格式化单元格不起作用。

此外,端子中的输出是正确的;它只有在导出到 CSV 时才会搞砸

如何阻止这种情况发生,我需要数据完全符合 SQL 表中的样子。

我正在使用:

  • Windows 10 22小时2小时
  • 微软 SQL Server 2005
  • PowerShell 版本 7.2.11
  • ® Microsoft Excel® for Microsoft 365 MSO(版本 2310 内部版本 16.0.16924.20054)

代码如下

Import-Module ImportExcel
$dataFile = Import-Excel -Path "C:\Desktop\Scripts\Aras\Copy of Part RN Sample Export - 11-11-23.xlsx"
$server = "ServerName"
$database = "DatabaseName"
$csvFilePath="C:\Desktop\Scripts\Aras\CSVOutput\Output_EngParts.csv"
#Write-Host $dataFile.PartRn
ForEach ($partRnItem in $dataFile){
    Write-host $partRnItem.PartRN
    $partRn = $partRnItem.PartRN
    $queryEngParts = "SELECT  [PartRn], [PartNo], [Title], [CompanyId] FROM [NIMS_Eng].[dbo].[EngParts] WHERE PartRn = $partRn"
    $invokeSql = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $queryEngParts 
    $invokeSql | Export-Csv -Path $csvFilePath -Append -NoTypeInformation
}

enter image description here enter image description here

sql-server excel windows PowerShell

评论

2赞 Xedni 11/15/2023
SQL 2005?好悲伤,是时候升级我的朋友了。
0赞 Xedni 11/15/2023
所以你是说,如果在 SSMS 中,你运行了你得到的查询,但当你打开从这些结果创建的 CSV 时,值是 ?select PartRn, PartNo from dbo.EngParts where PartRN = 19946PartNo2045-2-2Export-Csv2/2/2045
0赞 Brute 11/15/2023
@Xedni是的,没错。结果在VS Code的终端中也是正确的。不过,请使用 SSMS 18。
0赞 Xedni 11/15/2023
那么,如果你在记事本++(甚至记事本)中打开csv文件,它会是什么样子呢?Excel 没有机会修改数据的某个地方?
0赞 Brute 11/15/2023
@Xedni 哦,该死的!!格式在记事本 ++ 中看起来不错,但行重复,在 Excel 中没有,很奇怪。不过,最终用户在 Excel 中需要它

答:

1赞 Xedni 11/15/2023 #1

因此,从我们的评论来看,好消息是,您的数据正在正确生成,您只需要将其导入 Excel 而不会被破坏。我不是一个优秀的大师,但我能想到两种方法可以做到这一点。

首先,在记事本 ++ 中打开生成的 CSV 并复制所有内容(CTRL+A、CTRL+C)。然后打开一个空白的Excel文档,然后点击过去->文本导入向导

[![文本输入向导][1]][1]

这将弹出一个对话框,允许您在 excel 解析 CSV 时设置数据类型。我刚刚在我的机器上用你说的格式不正确的代码之一测试了这一点,并且在这样做后它保持了它。只需确保在到达该部分时将“列数据格式”设置为“文本”。

另一种选择是您可以创建一个空白的 excel 文档,然后使用所需的数据类型设置所有列的格式。这也应以适当的格式保留数据。

无论哪种方式,这都有点痛苦,因为您必须为创建的每个 CSV 进行手动工作,但也许它会让您入门,并为您提供一些运行想法。

如果您需要将数据作为 excel 文件,也许可以研究将 SQL 内容直接输出到 excel 文件的过程。导入/导出向导或 SSIS 可能是一种方法,也可能有用于此方法的 powershell 模块。

如果必须对要生成的每个文件执行此操作太繁重,也许您可以为您关心的所有值运行单个 csv。至少这样你就只需要处理一个 excel 文件。 [1]:https://i.stack.imgur.com/p750V.pngPartRn

评论

0赞 Brute 11/15/2023
完善!!刚刚导出了一个 excel 文件而不是 CSV,这有效!