正如this thread所讨论的那样,用户jkdba建议使用不同的方法来访问表的列。由于原始线程正在解决一个问题,我打开了这个线程,以了解如何使用invoke-sqlcmd访问表的特定列。如果有人有不同的方法,请不要犹豫分享。 :)
答案 0 :(得分:3)
首先,在使用Data Adapter方法时,可以使用相同的方法访问列值。我更喜欢使用PowerShell等价物(Invoke-SQLCmd
)到SqlCommand
和DataAdapter
,因为代码少得多,可读,并且对任何可能正在寻找的非开发人员都很友好在它。作为旁注,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
}