T-sql 比较链接服务器查询结果和本地查询结果

T-sql comparing results of linked server query with local query

我正在尝试将链接服务器查询的结果与本地查询的结果进行比较。我想做的是找出一台服务器上存在哪些登录,而另一台服务器上没有。目前只有 windows 个授权帐户可以。

我当前的查询是

Select name 
from [linkedServer].master.[sys].[server_principals]  
Where name not in ('Select name from sys.server_principals')

我得到的是链接服务器查询的结果,只是忽略了where。我该如何比较两者的结果?

首先,使用not exists。其次,我认为你的单引号是错误的:

select sp.name
from [linkedServer].master.[sys].[server_principals] sp
where not exists (select 1
                  from sys.server_principals sp2
                  where sp2.name = sp.name
                 );

我强烈建议您养成在子查询中使用 not exists 而不是 not in 的习惯,因为 not in returns no row if any 来自子查询的值是 NULL。这通常不是理想的行为。