我的任务是将 SQL Server 查询的结果保存到 .csv
文件中。经过一番谷歌搜索后,我决定使用 PowerShell。我找到了一个脚本,稍微修改了一下,它可以工作,几乎一切正常。
$server = "server"
$database = "database"
$query = "SELECT * from et_thanks"
$tod = Get-Date;
$file = "{0:yyyyMMdd}_go.csv" -f $tod;
$extractFile = @"
\\info\export_files\$file
"@
$connectionTemplate = "Data Source={0};Integrated Security=SSPI;Initial Catalog={1};"
$connectionString = [string]::Format($connectionTemplate, $server, $database)
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$command = New-Object System.Data.SqlClient.SqlCommand
$command.CommandText = $query
$command.Connection = $connection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $command
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$connection.Close()
$DataSet.Tables[0] | Export-Csv -Force -Delimiter ";" $extractFile
但是我有两个问题无法解决:
当我打开
.csv
文件时,我会在第一行看到列标题和注释字符串:#TYPE System.Data.DataRow "ob_no","c_name","c_visible","c_fp","e_from","e_to" "436439","09.09.2013 11:29:08","0","","10937","260153"
如何摆脱它?
所有值都用引号引起来。是否可以修改脚本以使其在导出时不使用它?自动替换不是一个好主意,因为有可能在sql数据中找到引号符号。
我尝试在文档 ( http://ss64.com/ps/export-csv.html ) 中找到答案,但没有成功。
最佳答案
删除引号时您可能会遇到麻烦,但如果这是您真正想要的,那么以下内容应该可以实现。
-NoTypeInformation 将删除您看到的其他类型信息。
($DataSet.Tables[0] | ConvertTo-Csv -Delimiter ";" -NoTypeInformation) -replace "`"", "" | `
Out-File -Force $extractFile
这使用 convertto-csv转换为 csv 的字符串表示形式,然后将 "的所有实例替换为空,最终字符串通过管道传输到 Out-File 。
关于sql-server - 将 SQL 查询导出到 CSV 时如何格式化输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21133911/