システム検証の一環として、2 つのクエリの結果を比較しようとしています (以下の単純化されたバージョン)。
-- Reference query, writing the criteria myself as part of the verification process
SELECT p.Id, p.FullName
FROM Person p
WHERE -- some criteria
と
-- 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))
私のプロセスはツールと自動化が非常に貧弱であるため、これらのリクエストはほとんど手作業で入力しています。エラーが発生しやすいため、クエリを2回再入力/コピーアンドペーストする必要はありません。
質問は簡単です:次のようなものを書くことを可能にする簡単な構文 (または簡単なツール) はありますか?
(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 )