【问题标题】:How to Compare two SQL tables and get the difference value using Powershell如何使用 Powershell 比较两个 SQL 表并获取差异值
【发布时间】:2020-09-26 20:02:49
【问题描述】:

我在 SQL Server 数据库中有两个表。

Table1 看起来像:

ServerName   ServiceName ServiceStatus
----------   ----------- -------------
Server1      iis         running      
Server2      sql         running      
Server3      www         running 

Table2 看起来像:

ServerName   ServiceName ServiceStatus
----------   ----------- -------------
Server1      iis         running      
Server2      sql         Notrunning      
Server3      www         running 

我想使用 Powershell 比较表并获取状态差异,因为 {On Server2 service "sql" status is changed from "running" to "Notrunning"}。

我在下面尝试过,但没有输出。请帮帮我。

$SQLServer = "Server1\sql"
$db3 = "test"
$T1data = "SELECT ServerName, ServiceName, ServiceStatus FROM Table1"
$T2data = "SELECT ServerName, ServiceName, ServiceStatus FROM Table2"
$s = Invoke-Sqlcmd -ServerInstance $SQLServer -Database $db3 -Query $T1data 
$p = Invoke-Sqlcmd -ServerInstance $SQLServer -Database $db3 -Query $T2data 
#$q = Compare-Object $p $s -Property servicestatus

Foreach($q in $s.serverName) {
    while ($s.serverName -eq $p.serverName -and $s.servicename -eq $p.servicename ) {
        if($s.servicestatus -ne $p.servicestatus) {
              Write-Output  " On server $s.serverName the service $s.servicename changed from $P.servicestatus to $s.servicestatus " 
        }
    }
}

【问题讨论】:

    标签: powershell invoke-sqlcmd


    【解决方案1】:

    基于this在mssqltips网站上阅读:

    通过 BCP 实用程序将表数据转储到文件中,然后获取文件的 MD5 哈希值进行比较。数据文件格式由 -ValueOnly 参数控制,如果使用 -ValueOnly 参数,我们将对 BCP.exe 使用 -c 参数(所有列都被视为字符数据类型),否则,我们使用 -n 参数(所有列都被处理作为原生数据类型)用于 BCP.exe。

    【讨论】:

      【解决方案2】:

      如果采用不同的技术,并使用 SQL Server 为您提供差异?

      SELECT t1.ServerName, t1.ServiceName, t1.ServiceStatus 
      FROM Table1 t1
      JOIN Table2 t2 on t1.SeverName = t2.ServerName
      AND t1.ServiceName = t2.ServiceName 
      AND t1.ServiceStatus <> t2.ServiceStatus
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-19
        • 2021-03-12
        • 2022-06-28
        • 1970-01-01
        • 2021-04-20
        • 2022-07-08
        • 1970-01-01
        相关资源
        最近更新 更多