2010-08-04 65 views
0

您好我正在編寫一個TSQL的長程序,從舊的數據(和非常髒的數據集)中抽取數據並重新格式化輸出,包括列標題以匹配新的數據集。新表和舊錶。爲了測試的目的,我每次都帶來10萬行。爲了驗證表結構和字段屬性是否相同,我的老闆要求我使用TSQL EXCEPT。我進入了我們的2008服務器,並從2008年的舊歸檔數據中提取了新表2005年的數據和數據中的數據。TSQl EXCEPT驗證

我使用的代碼如下:

SELECT * FROM #NEW_TABLE 
EXCEPT 
SELECT * FROM #OLD_TABLE 

except語句輸出100k的所有記錄來自新表。我是否正確,這是因爲數據中沒有匹配,而不是表結構問題,因爲我沒有收到任何錯誤。

回答

0

是 - 據我瞭解你在新表中的所有記錄,因爲他們沒有匹配的舊錶的那些(除外用途)

0

這是正確的,但要看你是什麼意思通過「匹配」。

爲了除了工作,所有列必須與兩個表匹配,才能將其從結果集中移除。這意味着,如果你有一些看起來像:

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

,並使用除具有以下內容:

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

你仍然會看到作爲輸出:

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

我的意思是匹配如表結構中的字段順序和字段屬性都是相同的,而不是數據本身。 – JMS49 2010-08-05 00:12:56

+0

那完全是一個不同的查詢。您應該從sys.columns中選擇引用這兩個表,然後在這些結果上執行EXCEPT。如果列數不匹配,EXCEPT甚至不會工作,但它不能告訴你更多的東西。 – 2010-08-05 00:18:42