0

嗨,我正在用 TSQL 编写一个长程序,该程序从 OLD(并且非常脏的数据集)中提取数据,清理数据并重新格式化输出,包括列标题以匹配新数据集新旧表中都有 130 列. 出于测试的目的,我从每个中引入 100k 行。为了验证表结构和字段属性是否相同,我的老板要求我使用 TSQL EXCEPT。我进入我们的 2008 服务器并从新表 2005 数据和 2008 旧存档数据中提取数据。

我正在使用的代码如下:

SELECT * FROM #NEW_TABLE
EXCEPT
SELECT * FROM #OLD_TABLE

EXCEPT 语句输出新表中的所有 100k 记录。我是否正确,这是因为数据中没有匹配项,而不是表结构问题,因为我根本没有收到任何错误。

4

2 回答 2

0

是的-据我了解,您获得了新表上的所有记录,因为它们都与旧表上的记录不匹配(除此之外的目的)

于 2010-08-04T23:52:04.350 回答
0

没错,但这取决于您所说的“匹配”是什么意思。

为了使 EXCEPT 起作用,两个表中的所有列都必须匹配,以便将其从结果集中删除。这意味着,如果你有类似的东西:

ID  Name   Salary
--- ------ ------
1   John   550k
2   Sue    500k
3   Bill   40k

并且您将 EXCEPT 与以下内容一起使用:

ID  Name   Salary
--- ------ ------
1   John   520k

你仍然会看到你的输出:

ID  Name   Salary
--- ------ ------
1   John   550k
2   Sue    500k
3   Bill   40k
于 2010-08-04T23:59:22.423 回答