【发布时间】:2021-12-13 04:04:59
【问题描述】:
背景
我必须运行SqlCmd 和Bcp 才能得到一个Sql 表的输出。 有更好的方法,但这是我可以使用的。
首先,我运行SqlCmd 来获取表头并保存到C:\headers.csv。
SqlCmd -S Server -d Database -Q "set nocount on; select top 0 * from TableName;" -o "C:\headers.csv" -s "," -W
接下来,我运行Bcp 从表中获取数据并保存到C:\data.csv。
Bcp TableName out "C:\data.csv" -S Server -d Database -T -t , -c
我最终得到了两个文件 headers.csv 和 data.csv。我需要将headers.csv 的内容附加到data.csv 的开头。
我的尝试
令人讨厌的是,SqlCmd 在标题后添加了一行连字符。我去掉那一行:
Get-Content -Path "C:\headers.csv" -TotalCount 1 | Out-File -FilePath "C:\final-output.csv" -Force
这就是我想出的做两个文件的最终“连接”:
[System.IO.File]::AppendAllLines("C:\final-output.csv",[System.IO.File]::ReadLines("C:\data.csv"))
我在 Server 2016 上运行。使用 PowerShell 是否有更快的方法来读取或写入 final-output.csv?
【问题讨论】:
-
为什么不将两个结果都存储在变量中,然后附加它们,而不是导出到文件然后再次读取文件?您可以编辑添加命令以获得结果
SqlCmd和Bcp的问题 -
这可能是比写入文件更好的方法。只需要弄清楚命令。我在 Server 2016 上可以使用 SQLPS 模块卡住。添加了
SqlCmd和Bcp的命令。 -
不,您不需要将 headers.csv 的内容附加到 data.csv 的开头。您需要做相反的事情 - 将 data.csv 附加到 headers.csv。您可以使用
type data.csv >> headers.csv直接从命令提示符处执行此操作。
标签: .net powershell