2012-03-28 58 views
-1

插入我有一個包含3個字段數據由SSIS

Cust_id Cust_name Cust_salary 
1   A  2000 
2   B  3000 
3   C   NULL 

我希望把這些3列的數據在員工(DATABASE BBB),其具有相同的結構被稱爲顧客(DATABASE AAA)的表作爲客戶。

我想轉移只有Cust_salary部分不爲空的那些客戶的記錄。

這項工作只能在SSIS中完成。在將值賦給Employee_id之前,Cust_id的MY值是自動生成的&,應刪除Employee表。應該保留自動生成的標識。

+0

這只是[數據流](http://msdn.microsoft.com/zh-cn/library/ms141122.aspx)任務,帶有OLE DB源和OLE DB目標。對源的查詢是'SELECT * FROM Customer WHERE Cust_Salary IS NOT NULL' – GarethD 2012-03-28 10:23:51

+3

您可能還記得我對上一個問題的回答:http://stackoverflow.com/questions/9799358/sql-query-task-in-ssis也,請嘗試瞭解SQL和SSIS之間的區別;你問了很多有關SSIS的問題,但到目前爲止,幾乎所有情況下,真正的問題都是關於SQL,而不是關於SSIS。這是另一種情況。 – Pondlife 2012-03-28 10:24:06

+0

@manoj:你**真**應該開始學習SQL! – 2012-03-28 10:29:50

回答

2

達倫·戴維斯的答案似乎是正確的,但如果對於一些模糊的原因,你有一個僱員也一個標識列並且需要與Cust_ID匹配,並且假設已經在Employee表中的任何條目與正確的客戶相對應,您可以使用SSIS中的一個執行SQL任務,並向數據庫BBB打開一個連接以運行以下命令:

SET IDENTITY_INSERT Employee ON 

INSERT INTO Employee (EmployeeID, EmployeeName, EmployeeSalary) 
SELECT Cust_ID, Cust_Name, Cust_Salary 
FROM AAA..Customer 
WHERE Cust_Salary IS NOT NULL 
AND  NOT EXISTS 
     ( SELECT 1 
      FROM Employee 
      WHERE EmployeeID = Cust_ID 
     ) 

SET IDENTITY_INSERT Employee OFF 

這將維護每個表中標識字段的完整性,並且只將新客戶插入到Employee表中。

+0

上述工作可以在沒有SQL執行任務的情況下在SSIS中執行 – 2012-03-29 07:34:06

+0

您能否解釋爲什麼需要在SSIS中完成這項工作? EmployeeID是標識列嗎? – GarethD 2012-03-29 08:02:36

+0

它是一個複雜的解釋你爲什麼我需要在SSIS.ya中完成這項工作,Employee_ID是一個標識列。 – 2012-03-29 09:11:17

2

你試過了什麼?

您將需要兩個連接,一個用於每個DB和一個數據流組件,其中將有一個OleDBSource和一個OleDBDestination組件。

在OleDBSource上,您可以選擇連接並編寫查詢,然後將綠色箭頭拖動到OleDBDestination。雙擊OleDBDestination選擇目標連接和表,然後單擊映射。

應該是它

+0

可以在上述工作可以在沒有SQL做到在SSIS – 2012-03-29 07:34:45

+0

是的,我不執行任務明白你爲什麼會需要一個SQL執行任務 – Diego 2012-03-29 08:19:37

+0

我不需要SQL執行任務 – 2012-03-29 10:15:30

3

您可以創建在SSIS一個SQL執行任務,並運行以下命令:

INSERT INTO Employee 
(EmployeeId, EmployeeName, EmployeeSalary) 
SELECT Cust_id, Cust_name, Cust_salary 
FROM Customer 
WHERE Cust_salary IS NOT NULL 
+0

這是行不通的,你就需要包裝領域要插入括號(即EmployeeID,EmployeeName,EmployeeSalary)中,並完全限定至少一個表(AAA..Customer或BBB..Employee)的數據庫名稱,假設它們位於同一個服務器上。 – GarethD 2012-03-28 10:29:13

+0

我希望這項工作僅限於SSIS – 2012-03-28 10:31:12

+2

這將在SSIS中通過創建一個SQL Execute Task對象來實現,如我的文章中所述。加雷思,我發現,你已經評論和改變之前。謝謝 – 2012-03-28 10:32:27