Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server中的SQL语句除外,未返回预期结果_Sql_Sql Server_Tsql - Fatal编程技术网

SQL Server中的SQL语句除外,未返回预期结果

SQL Server中的SQL语句除外,未返回预期结果,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两个相同的表,但它们位于不同的服务器上。一个表缺少我已验证的一行。我正试着比较这些表格以找到丢失的记录 借 或者反过来 SELECT GUID FROM [Server2].MyDatabase.dbo.tableA EXCEPT SELECT GUID FROM dbo.tableA 两个查询都返回零结果。我在两个表上都使用了select count(*),计数不同 我做错了什么 感谢您提前提供的任何反馈计数可以不同,并且除了之外,仍然可以返回零行。怎么用?如果一个或两个表中存在重复项

我有两个相同的表,但它们位于不同的服务器上。一个表缺少我已验证的一行。我正试着比较这些表格以找到丢失的记录

或者反过来

SELECT GUID FROM [Server2].MyDatabase.dbo.tableA
EXCEPT 
SELECT GUID FROM dbo.tableA
两个查询都返回零结果。我在两个表上都使用了
select count(*)
,计数不同

我做错了什么


感谢您提前提供的任何反馈

计数可以不同,并且除了之外,
仍然可以返回零行。怎么用?如果一个或两个表中存在重复项

以下是一个可以帮助您找到差异的修改:

SELECT GUID, ROW_NUMBER() OVER (PARTITION BY GUID ORDER BY GUID) as seqnum
FROM dbo.tableA
EXCEPT 
SELECT GUID, ROW_NUMBER() OVER (PARTITION BY GUID ORDER BY GUID) as seqnum
FROM [Server2].MyDatabase.dbo.tableA

根据我的经验,
EXCEPT
操作员在使用链接服务器时无法正常工作。为什么?我不知道

作为一种解决方法,我将远程服务器的行插入本地临时表,然后进行比较:(出于其他原因,我还将本地临时表复制到第二个临时表)


MyDatabase.dbo.tableA.Using not exist caluse中未显示表A值以获取此结果

SELECT GUID 
FROM dbo.tableA WHERE NOT EXISTS(SELECT 1 
                                 FROM [Server2].MyDatabase.dbo.tableA 
                                 WHERE GUID = [Server2].MyDatabase.dbo.tableA.GUID )

当你设置好它时,它取决于顺序,它是基于集合论的

  • 2、3、4不带(=除外)3-->设置值2、4
  • 3不带2、3、4-->表示空集
  • 没有1、2、3的3、3、4(这是您的情况)-->这意味着只设置一个值4
Exception表示从第一个集合中筛选任何行,其中值包含在第二个集合中。查询返回相同的输出,因为表中存在重复的行(具有相同的值)


请不要使用
除了/intersect
-使用
存在的
加入
子句中

虽然这可能是一个有效的答案,但您更有可能通过解释代码的功能和工作方式来帮助他人。只有代码的答案往往没有得到积极的关注,也不像其他答案那样有用。
Select GUID
  Into #Server2_tblA
  From [Server2].MyDatabase.dbo.tableA;

Select GUID
  Into #Local_tblA
  From dbo.tableA;

Select GUID From #Server2_tblA
Except
Select GUID From #Local_tblA;
...
SELECT GUID 
FROM dbo.tableA WHERE NOT EXISTS(SELECT 1 
                                 FROM [Server2].MyDatabase.dbo.tableA 
                                 WHERE GUID = [Server2].MyDatabase.dbo.tableA.GUID )