由于系统验证的一部分,我想比较两个查询之间的结果(如下简化版本)有没有实现T-SQL(两个请求之间的差值)
-- Reference query, writing the criteria myself as part of the verification process
SELECT p.Id, p.FullName
FROM Person p
WHERE -- some criteria
逻辑XOR一个聪明的办法
而且
-- Data Query, simply reading what my system under tests thinks of the same criteria
SELECT p.Id, p.FullName
FROM Person p
RIGHT JOIN PersonsThatMatchCriteria pmc ON ...
我想,以确保他们返回德相同的结果,并且如果没有,我想显示它们进行分析。
((REFERENCE QUERY)
EXCEPT
(DATA QUERY))
UNION
((DATA QUERY)
EXCEPT
(REFERENCE QUERY))
由于我的流程在工具和自动化方面很差,我主要是通过手工输入这些请求。我讨厌重新键入/复制粘贴查询两次,因为它很容易出错。
所以,问题很简单:有一个简单的语法(或简单的工具),让我写类似
(REFERENCE QUERY)
XOR
(DATA QUERY)
我发现效果很好,但仍然是沉重的一劈。有没有更好的(写起来更简单)?
DECLARE @ShouldBeIncluded TABLE(Id INT); INSERT INTO @ShouldBeIncluded
SELECT p.Id, p.FullName
FROM Person p
WHERE ...
DECLARE @ActuallyIncluded TABLE(Id INT); INSERT INTO @ActuallyIncluded
SELECT p.Id, p.FullName
FROM Person p
RIGHT J
SELECT p.Id, p.FullName
FROM Person p
WHERE p.Id IN ( SELECT Id FROM @ActuallyIncluded
EXCEPT SELECT Id FROM @ShouldBeIncluded )
OR p.Id IN ( SELECT Id FROM @ShouldBeIncluded
EXCEPT SELECT Id FROM @ActuallyIncluded )
我通常完全外连接。 DBA网站上的相关问题[轻松显示两个表或查询之间不同的行](http://dba.stackexchange.com/q/12580) – 2013-03-20 15:36:04