由於系統驗證的一部分,我想比較兩個查詢之間的結果(如下簡化版本)有沒有實現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