sql-server - 将 SQL 查询导出到 CSV 时如何格式化输出

标签 sql-server powershell csv export-to-csv

我的任务是将 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

但是我有两个问题无法解决:

  1. 当我打开 .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"
    

    如何摆脱它?

  2. 所有值都用引号引起来。是否可以修改脚本以使其在导出时不使用它?自动替换不是一个好主意,因为有可能在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/

相关文章:

sql-server - 使用 sql server Convert Function 将回历转换为公历日期

sql - 我在哪里可以获得 Anjlab 的 SQL Profiler 的旧版免费版本?

Powershell 服务帐户密码更改登录失败

python - 将数据框从特定行插入到现有 csv

python - 将 Pandas Dataframe 导出为 CSV

csv - 类型错误 : string from deserializer instead of int when load csv to table

sql-server - 如何使用 SQL 将数据从 Dynamics CRM 在线获取到我的 SQL 服务器?

sql - 打开 "September$"的行集失败。检查对象是否存在于数据库中

date - Powershell Win32Reg_AddRemovePrograms获取日期输出

powershell - 如何使用Get-ChildItem在具有特定名称的目录中查找文件?