Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将SQL查询导出到CSV时如何格式化输出_Sql Server_Powershell_Csv_Export To Csv - Fatal编程技术网

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

Sql server 将SQL查询导出到CSV时如何格式化输出,sql-server,powershell,csv,export-to-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\

我的任务是将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数据中找到引号符号


我试图在文档中找到答案,但没有成功。

删除引号时可能会遇到问题,但如果这是您真正想要的,那么下面应该可以实现

-NoTypeInformation将删除您看到的其他类型信息

($DataSet.Tables[0] | ConvertTo-Csv -Delimiter ";" -NoTypeInformation) -replace "`"", "" | `
Out-File -Force $extractFile

这用于转换为csv的字符串表示形式,然后将的所有实例替换为零,最后一个字符串将通过管道传输到。

您可能会遇到删除引号的问题,但如果这是您真正想要的,那么下面应该实现这一点

-NoTypeInformation将删除您看到的其他类型信息

($DataSet.Tables[0] | ConvertTo-Csv -Delimiter ";" -NoTypeInformation) -replace "`"", "" | `
Out-File -Force $extractFile

这用于转换为csv的字符串表示形式,然后将的所有实例替换为零,最后的字符串将通过管道传输到。

同意导出csv不是该作业的最佳工具。如果安装了SQL Server命令行工具,我将使用sqlcmd.exe或bcp.exe。您还可以构建一个简单的例程,从数据表创建CSV:

$result = new-Object text.stringbuilder
$dt = $DataSet.Tables[0]

foreach ($dr in $dt.Rows) {
           for ($i = 0; $i -lt $dt.Columns.Count; $i++) {

                $null = $result.Append($($dr[$i]).ToString())
                $null = $result.Append($(if ($i -eq $dt.Columns.Count - 1) {"`n" } else { ","} ))
            }
}

$result.ToString()

商定的导出csv不是该工作的最佳工具。如果安装了SQL Server命令行工具,我将使用sqlcmd.exe或bcp.exe。您还可以构建一个简单的例程,从数据表创建CSV:

$result = new-Object text.stringbuilder
$dt = $DataSet.Tables[0]

foreach ($dr in $dt.Rows) {
           for ($i = 0; $i -lt $dt.Columns.Count; $i++) {

                $null = $result.Append($($dr[$i]).ToString())
                $null = $result.Append($(if ($i -eq $dt.Columns.Count - 1) {"`n" } else { ","} ))
            }
}

$result.ToString()

…并且,要删除标题记录,如果您首先将数据转换为csv convert csv,然后通过管道将这些结果选择以跳过第一条记录:

($DataSet.Tables[0] | ConvertTo-Csv -Delimiter "`t" -NoTypeInformation ) -Replace "`"","" | Select -skip 1 | Out-File blahblahblah...

…并且,要删除标题记录,如果您首先将数据转换为csv convert csv,然后通过管道将这些结果选择以跳过第一条记录:

($DataSet.Tables[0] | ConvertTo-Csv -Delimiter "`t" -NoTypeInformation ) -Replace "`"","" | Select -skip 1 | Out-File blahblahblah...

谢谢,大卫,-1个问题。在我看来,不可能读取引号和列名,因为导出是通过csv标准进行的。导出Csv cmdlet对于我的任务来说不是最好的主意。谢谢David,-1问题。在我看来,不可能读取引号和列名,因为导出是通过csv标准进行的。导出Csv cmdlet对于我的任务来说不是最好的主意。非常感谢您的建议。非常感谢您的建议。