如何使用invoke-sqlcmd访问数据集中表的特定列?

时间:2017-02-07 20:29:12

标签: powershell

正如this thread所讨论的那样,用户jkdba建议使用不同的方法来访问表的列。由于原始线程正在解决一个问题,我打开了这个线程,以了解如何使用invoke-sqlcmd访问表的特定列。如果有人有不同的方法,请不要犹豫分享。 :)

1 个答案:

答案 0 :(得分:3)

首先,在使用Data Adapter方法时,可以使用相同的方法访问列值。我更喜欢使用PowerShell等价物(Invoke-SQLCmd)到SqlCommandDataAdapter,因为代码少得多,可读,并且对任何可能正在寻找的非开发人员都很友好在它。作为旁注,Invoke-SQLCmd主要是进行相同的底层Dot Net调用。

因此,在进入Invoke-SQLCmd和基本对象属性访问之前,您可以使用与其他帖子中的$DataSet对象相同的属性访问技术,如下所示:

  • 这将返回表或数据表对象$DataSet.Tables
  • 这将返回数据表对象$DataSet.Tables.ColumnName的所有列值。

当您使用Invoke-SQLCmd时,它将返回一个充满Dot Net DataRows的PowerShell数组对象。它基本上只是更少的代码。

运行Invoke-Sqlcmd

 ## Run Query and Get Date
 $SQLResults = Invoke-Sqlcmd -ServerInstance 'Server\Instance' -Database 'DatabaseName' -Query 'select * from mytable'
 ## You can always see all of the properties and methods associated with the result object by running the command below
 $SQLResults | Get-Member
 ## The above will show the PowerShell understood properties and implicit stuff it does.
 ## Adding -Force to the Get-Member call will show the true datatypes and properties.

获取列的所有值

 ## If you just want to list all of the values for a column you would do variable.property name aka results.columnname
 $SQLResults.MyColumnName
 ## If The column name has a space in it, you can do this
 $SQLResults.'My Column Name'
 ## Both of the above results will dump all of the values from the query results for the column of 'MyColumnName'

访问行的每一列

 foreach($Row in $SQLResults)
 {
     ## this would print the value of each column for reach row one by one.
     $Row.ColumnName
     $Row.ColumnName1
     $Row.ColumnName2
 }

向结果中添加列

使用Add-Member函数执行某些逐行处理后,您可以轻松地向结果添加列。

 foreach($Row in $SQLResults)
 {
     ## some sort of row by row processing
     if($Row.ColumnName -ilike 'some*value')
     {
         $Row | Add-Member -MemberType NoteProperty -Name 'MYNewColumnName' -Value 'IfTrueLogicValue'
     }
     else
     {
         $Row | Add-Member -MemberType NoteProperty -Name 'MYNewColumnName' -Value 'IfFalseLogicValue'
     }

     ##Be Sure to output the row
     $Row
 }