我将sql server表数据提取到csv文件。当没有行时,我仍然需要列标题。下面的代码只返回空白文件。
$queryData = "SELECT * FROM [$viewfilename] "
#Specify the output location of your dump file
$extractFile = "$filepath\DATA\ $viewfilename.csv"
$command.CommandText = $queryData
$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 $extractFile -NoTypeInformation
答案 0 :(得分:0)
将“$ DataSet.Tables [0] | Export-Csv $ extractFile -NoTypeInformation”更改为此代码:
if ($DataSet.Tables[0].Rows.Count -eq 0) {
$header = ""
foreach ($col in $DataSet.Tables[0].Columns) {
$header += $col.ColumnName +","
}
$header.Remove($header.Length-1,1) | Out-File $extractFile
} else {
$DataSet.Tables[0] | Export-Csv $extractFile -NoTypeInformation
}
答案 1 :(得分:0)
与Michael Kunznetsov的答案类似,我们将检查是否存在任何行,如果不存在,我们将只添加一个空行。然后输出表格,无论如何,您将拥有一个充满数据或一个空白条目的文件。这需要几个周期,因为我们不必循环遍历列,因为创建新行是基于DataTable架构并且将包括所有列标题。
if ($DataSet.Tables[0].Rows.Count -eq 0) {
$DataSet.Tables[0].Rows.Add($DataSet.Tables[0].NewRow())
}
$DataSet.Tables[0] | Export-Csv $extractFile -NoTypeInformation
如果空白条目真的困扰您,并且您只想要标题,则可以通过添加行,然后转换为CSV,仅选择第一行并将其保存到文件来使事情变得复杂一些。这看起来更像是:
if ($DataSet.Tables[0].Rows.Count -eq 0) {
$DataSet.Tables[0].Rows.Add($DataSet.Tables[0].NewRow())
$DataSet.Tables[0] | ConvertTo-Csv -NoTypeInformation | Select -First 1 | Set-Content $extractFile
}Else{
$DataSet.Tables[0] | Export-Csv $extractFile -NoTypeInformation
}
这样可以确保您拥有格式正确的CSV文件,以防您的标题中包含空格或逗号。