Sql-Server

如何比較暫存表和操作表之間的數據?

  • December 4, 2018

我只想問如何比較兩個數據庫表,暫存表與操作表。

在我們進行轉換並將其轉換為正確的數據類型(如將flag列(Y/N)轉換nvarcharbit或轉換為)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

希望這可以幫助。


您可以在此處獲得有關 HASHBYTES和 EXCEPT 運算符的更多資訊。

引用自:https://dba.stackexchange.com/questions/77759