2013-07-16 35 views
2

我有以下代碼。SELECT D DISTINCT with Duplication check

INSERT INTO [dbo].[Employees_Dim] ([EmpNo], [EmpName]) 
SELECT DISTINCT st.[EmpNo], [EmpName] 
FROM [dbo].[EEMasterData] st 

我想從主表中取出兩列來創建員工維度。 (對於來自此主表的其他維度,這將被複制)。

我希望能夠在查看主數據的SSIS包中運行腳本,參考Employee_Dim並僅根據員工編號添加新員工。

我知道我錯過了一些東西只是不知道是什麼。

更新:我的問題是,我應該在上面的腳本中添加什麼,以便將EmpMe用作關鍵字,只將EEMasterData表中新添加的員工插入到EmployeeDim中。

+4

我們也不:)那麼,什麼是你的問題? – logixologist

+0

對不起,我急着添加這個。我更新了上面的問題。 –

回答

4

...和只添加新員工......

如果這是你所面臨的問題,只選擇那些不已經在你的維度表中存在條目:

INSERT INTO [dbo].[Employees_Dim] ([EmpNo], [EmpName]) 
SELECT DISTINCT st.[EmpNo], [EmpName] 
FROM [dbo].[EEMasterData] st 
WHERE st.[EmpNo] NOT IN (SELECT EmpNo FROM Employees_Dim) 

(假設EMPNO是唯一爲每個員工)

+0

正確,EmpNo對每位員工都是獨一無二的。我會試試這個,我想這就是我一直在尋找的東西。謝謝。 –

+1

如果您使用的是SQL Server 2008及更高版本(也許是2005年),那麼執行'WHERE NOT EXISTS(SELECT 1 FROM Employees_Dim edim WHERE edim.EmpNo = st.EmpNo)'會更快。 –

+1

@tommy_o:你確定(=你是否測過這個)?如果Employees_Dim.EmpNo和st.EmpNo都不可爲空,則兩個版本在語義上是等效的。那麼爲什麼查詢優化器會爲他們選擇不同的執行計劃呢? – Heinzi