【问题标题】:How to compare results from Invoke-Sqlcmd?如何比较 Invoke-Sqlcmd 的结果?
【发布时间】:2020-01-08 16:56:24
【问题描述】:

目标是比较数据库查询结果。但是,在Invoke-Sqlcmd 的结果上使用Compare-Object 并不表示不同事物的粒度级别。我怎么能得到那个?我必须手动逐个字段进行比较吗?

InputObject         SideIndicator
-----------         -------------
System.Data.DataRow <=
System.Data.DataRow <=
System.Data.DataRow <=
...

结果由以下代码生成。

$query = @"
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '$TableName'
AND TABLE_SCHEMA = '$Schema'
"@
$t1 = Invoke-Sqlcmd -ServerInstance $SqlInstance -Database $Database -Query $query

$query2 = @"
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '$TableName2'
AND TABLE_SCHEMA = '$Schema2'
"@
$t2 = Invoke-Sqlcmd -ServerInstance $SqlInstance2 -Database $Database2 -Query $query2

$t1.GetType()
$t1[0].GetType()
$t1[0] | fl * -Force
$t2[0] | fl * -Force
Write-Information -MessageData "comparing both query results"
Compare-Object -ReferenceObject $t1 -DifferenceObject $t2

Write-Information -MessageData "comparing first elements of the array"
Compare-Object -ReferenceObject $t1[0] -DifferenceObject $t2[0]

Write-Information -MessageData "comparing first element members"
Compare-Object -ReferenceObject ($t1[0]).COLUMN_NAME -DifferenceObject ($t2[0]).COLUMN_NAME
$query = @"
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '$TableName'
AND TABLE_SCHEMA = '$Schema'
"@
$t1 = Invoke-Sqlcmd -ServerInstance $SqlInstance -Database $Database -Query $query

$query2 = @"
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '$TableName2'
AND TABLE_SCHEMA = '$Schema2'
"@
$t2 = Invoke-Sqlcmd -ServerInstance $SqlInstance2 -Database $Database2 -Query $query2

$t1.GetType()
$t1[0].GetType()
$t1[0] | fl * -Force
$t2[0] | fl * -Force
Write-Information -MessageData "comparing both query results"
Compare-Object -ReferenceObject $t1 -DifferenceObject $t2

Write-Information -MessageData "comparing first elements of the array"
Compare-Object -ReferenceObject $t1[0] -DifferenceObject $t2[0]

Write-Information -MessageData "comparing first element members"
Compare-Object -ReferenceObject ($t1[0]).COLUMN_NAME -DifferenceObject ($t2[0]).COLUMN_NAME

【问题讨论】:

    标签: sql-server powershell


    【解决方案1】:
    Compare-Object ($t1 | ConvertTo-CSV) ($t2 | ConvertTo-CSV) | Format-List
    

    如果生成的 CSV 不太宽而无法在屏幕上显示,请删除 | Format-List

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2021-01-08
      • 1970-01-01
      • 2016-05-11
      • 2021-10-02
      • 2019-10-28
      • 2021-01-21
      • 2012-09-18
      • 2016-01-15
      相关资源
      最近更新 更多