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

LED*_*tom 2 powershell

正如该线程中所讨论的,用户 jkdba 建议了一种不同的方法来访问表的列。由于原始线程正在修复一个附带问题,因此我打开了该线程以了解如何使用 invoke-sqlcmd 访问表的特定列。如果有人有不同的方法,请不要犹豫分享。:)

jkd*_*dba 5

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

因此,在我进入Invoke-SQLCmd基本的对象属性访问之前,您可以对$DataSet您的其他帖子中的对象使用相同的属性访问技术,就像这样:

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

当您使用 时Invoke-SQLCmd,它将返回一个充满 Dot Net DataRow 的 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.
Run Code Online (Sandbox Code Playgroud)

获取列的所有值

 ## 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'
Run Code Online (Sandbox Code Playgroud)

访问一行的每一列

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

在结果中添加一列

使用该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
 }
Run Code Online (Sandbox Code Playgroud)