Sql-Server
如何比較暫存表和操作表之間的數據?
我只想問如何比較兩個數據庫表,暫存表與操作表。
在我們進行轉換並將其轉換為正確的數據類型(如將
flag
列(Y/N)轉換nvarchar
為bit
或轉換為)int
之後,如何比較兩個表之間的數據?
如果您想使用 T-SQL 和 SSIS,有幾個選項。
您可以比較 staging 表與 ops 表上的鍵列以確定該行是否已經存在,這樣您就可以知道是否需要執行 INSERT 或 UPDATE。
如果使用 SSIS,您可以使用查找組件。您的源組件將具有類似
SELECT keycol FROM OpsTable
.查找組件將具有類似的源
SELECT keycol FROM StagingTable
.
OpsTable
您可以使用“不匹配輸出”選項來獲取not in 中的所有行StagingTable
。如果使用 T-SQL,您可以像這樣使用 EXCEPT 運算符
SELECT keycol FROM OpsTable EXCEPT SELECT keycol FROM StagingTable
如果您需要比較所有列(關鍵列和非關鍵列),您可以使用 HASHBYTES 並散列所有非關鍵列進行比較。請注意,HASHBYTES 僅接受(VARCHAR、NVARCHAR 或 VARBINARY),因此您必須將任何 DATE 或類似的列轉換為 VARCHAR。
SELECT keycol, HASHBYTES('SHA1',col1 + col2 + ISNULL(convert(nvarchar(100),ColDate,109),'') FROM OpsTable
希望這可以幫助。