提问人:Brute 提问时间:11/15/2023 最后编辑:Brute 更新时间:11/15/2023 访问量:39
在不更改数据格式的情况下无法从 SQL 导出为 CSV?
Cannot export to CSV from SQL without changing the format of the data?
问:
我想做的很简单。
我有 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
}
答:
因此,从我们的评论来看,好消息是,您的数据正在正确生成,您只需要将其导入 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
评论
select PartRn, PartNo from dbo.EngParts where PartRN = 19946
PartNo
2045-2-2
Export-Csv
2/2/2045