【发布时间】:2019-11-08 15:26:08
【问题描述】:
我的 SQL 数据库中有两个表。我想检查Specifier 列的数据是否完全相同。
OK 情况,因为两个表在Specifier 列中具有相同顺序的相同数据:
-- Table1:
RowID Specifier
187 1
188 1
189 2
-- Table2:
RowID Specifier
181 1
182 1
183 2
错误情况,因为数据不同:
-- Table1:
RowID Specifier
187 1
188 2
189 3
-- Table2:
RowID Specifier
181 1
182 2
183 2
错误情况,因为数据的顺序不同:
-- Table1:
RowID Specifier
187 1
188 1
189 2
-- Table2:
RowID Specifier
181 1
182 2
183 1
错误情况,由于数据量不同:
-- Table1:
RowID Specifier
187 1
188 1
189 2
-- Table2:
RowID Specifier
181 1
182 1
183 2
184 1
我编写了以下查询,它几乎可以正常工作,并且如果一个表有值而另一个表没有值,它会正确给出错误,但如果只是顺序不正确,它不会错误地给出错误:
IF EXISTS
(SELECT Specifier FROM Table1 EXCEPT SELECT Specifier FROM Table2
UNION ALL
SELECT Specifier FROM Table2 EXCEPT SELECT Specifier FROM Table1)
BEGIN
THROW 99999, 'Mismatching Specifiers between the two tables', 1;
END;
【问题讨论】:
-
rowid 是否也匹配或者相同的 Specifier 可以有不同的 rowid?
-
做一个完整的外连接。
-
@JuanCarlosOropeza 不,
RowIDs 完全无关 -
rowids 并非无关紧要,它们只是不匹配。如果要强制执行行顺序规则,则需要在ORDER BY子句中使用它们。 -
@EricBrandt 啊,好的。
标签: sql sql-server tsql sql-server-2016