1

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

表 1 看起来像:

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 服务“sql”状态从“正在运行”更改为“未运行”}。

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

$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 " 
        }
    }
}
4

2 回答 2

0

根据mssqltips 网站上的阅读

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

于 2020-09-26T20:10:40.160 回答
0

使用不同的技术如何,并使用 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
于 2020-09-26T20:11:07.707 回答