Powershell Invoke-Sqlcmd to DataTable rowcount 在其 1 条记录时不正确

MBu*_*nan 3 sql-server powershell

$sql=("select top 1 * FROM CollectionProfile")

$CollectionProfile = New-Object System.Data.DataTable

$CollectionProfile = Invoke-Sqlcmd -ServerInstance $Instance -Database $db -Query $sql -ErrorAction Stop  

$CollectionProfile.Rows.Count
Run Code Online (Sandbox Code Playgroud)

回报:0

但是,如果我将 TOP 计数更改为 2 -

$sql=("select top 2 * FROM CollectionProfile")
Run Code Online (Sandbox Code Playgroud)

回报:2

让我发疯,是的,我在“内网”上找不到对此的任何引用。我一定是做错了什么,但是什么?

dug*_*gas 7

当您使用 TOP 1 查询时,Invoke-SqlCmd 返回一个 DataRow。当您使用 TOP 2 查询时,Invoke-SqlCmd 返回一个 DataRow 数组。Invoke-SqlCmd 不返回 DataTable。您可以更改代码以强制返回数组(请参见此处:force array),然后检查其上的计数:

$sql = ("select top 1 * FROM CollectionProfile")

$CollectionProfile = @(Invoke-Sqlcmd -ServerInstance $Instance -Database $db -Query $sql -ErrorAction Stop)

$CollectionProfile.Count #Returns 0 with Null, 1 with TOP 1, and 2 with TOP 2
Run Code Online (Sandbox Code Playgroud)