格式化PowerShell SQL Server输出到列和行

时间:2013-05-27 18:15:03

标签: sql sql-server-2008 tsql powershell

我是Powershell的初学者,试图查询SQL Server数据库并在文件组织的行和列中输出csv。我可以使用以下命令部分实现此目的:

sqlps -Command Invoke-Sqlcmd -ServerInstance "xxx.xx.xxx.xxx" 
      -Database "xxxx" -InputFile "xxx" | out-file -filepath "xxxx"

我的问题是查询的输出不是行和列,而是将每一行组合为一个字符串列表,每个单元格一个字符串。例如:

column a: value 1  
column b: value 1  
column c: value 1  

column a: value 2  
column b: value 2  
column c: value 2  

我也尝试过使用export-csv,但这只会返回上面命令返回的每个字符串的长度,就像这个问题一样:Export csv spits out length only

我尝试了group-object,但我正努力让它发挥作用。如果有人能够在概念上解释我正在尝试用一些明确的指导方针做什么,那将非常感激。

2 个答案:

答案 0 :(得分:0)

我认为你要找的是-NoTypeInformation开关。

$results | export.csv $FilePathOfCSV -NoTypeInformation

-NoTypeInformation是一个从输出的CSV文件中省略类型信息的开关。 CSV的第一行包含类型,后跟它正在使用的.NET框架对象的全名。

这应该为您提供结构化的CSV输出。

希望它有效!

答案 1 :(得分:0)

Export-Csv期望输入为对象。字符串输入被视为字符串对象,它只有一个属性(Length),因此只导出此属性。如果您的输入是一个字符串数组,则需要将其作为一个对象,例如像这样:

$array = "foo", "bar", "baz"

New-Object -Type PSCustomObject -Property @{
  "a" = $array[0]
  "b" = $array[1]
  "c" = $array[2]
} | Export-Csv output.csv -NoTypeInformation

以上内容将创建一个文件output.csv,其中包含以下内容:

"c","a","b"
"baz","foo","bar"

属性名称(abc)将成为CSV标头,属性值(foobar,{{1 }})成为CSV值。

如果您的SQL查询生成数组列表,您可能需要执行以下操作:

baz

我手头没有SQL服务器,所以请耐心等待。