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

それは正しいですが、それはあなたが「マッチ」が何を意味するかによります。

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 に答える
0

はい - 私が理解している限りでは、古いテーブルのレコードと一致するレコードがないため、新しいテーブルのすべてのレコードを取得します (EXCEPT の目的)。

于 2010-08-04T23:52:04.350 に答える