【发布时间】:2020-06-02 12:44:42
【问题描述】:
我有一个脚本,它从 SQL 数据库中提取数据并在 excel 中给出 o/p,但 o/p 位于单列下。我想把它放在不同的列中。这是我的脚本:
$SQLServer = ""
$SQLDBName = ""
$SqlQuery = ""
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True; User ID = $uid; Password = $pwd;"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$DataSet.Tables[0] | out-file "C:\Users\sql.csv"
我也试过这个脚本:
$SQLServer = ""
$SQLDBName = ""
$SqlQuery = "select request_number,actioneer,audited_date from form_submission where actioneer ='XXXX' AND audited_date between '2020-05-19 00:00:00:000' and '2020-05-19 19:16:00:000';"| | Select @{n='request_number';e={request_number}}, @{n='actioneer';e={actioneer}} ,@{n ='audited_date';e={audited_date}}
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database =
$SQLDBName; Integrated Security = True; User ID = $uid; Password = $pwd;"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$DataSet.Tables[0] | out-file "C:\Users\sql.csv"
但这会导致以下错误:
Exception calling "Fill" with "1" argument(s): "Must declare the scalar variable "@"."
At C:\Users\sraghur\Documents\sql powershell.ps1:12 char:1
+ $SqlAdapter.Fill($DataSet)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SqlException
【问题讨论】:
-
也许改用 Invoke-SqlCmd 并将其输出分配给可以通过管道传输到 CSV 文件的变量,或者使用 Excel 中的 Text to Columns 功能根据分隔符将数据拆分为列结果?
-
无法重现,我的测试导出创建了标准 CSV。没有看到查询和/或实际数据,这只是一个猜谜游戏。
-
检查 Read-SqlTable 和这个 SO 问题stackoverflow.com/questions/33171372/…
标签: sql powershell