2012-03-28 9 views
-1

によって挿入される私は同じ構造を持っている従業員(DATABASE BBB)にこれらの3つの列のデータを入れたい3つのフィールドデータは、SSIS

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

を含む顧客(データベースAAA)として知られているテーブルを持っていますカスタマーとして。

Cust_salary部分がnullでない顧客のみのレコードを転送したいと考えています。

この作業はSSISでのみ行われます。 Cust_idのMY値は、&に自動的に生成され、Employee_idに値を設定する前にEmployeeテーブルを削除する必要があります。自動生成されたIDは保持する必要があります。

+0

これは単なる[データフロー](http://msdn.microsoft.com/en-us/library/ms141122.aspx)タスクで、OLE DBソースとOLE DBの宛先があります。ソースのクエリは 'SELECT * FROM Customer WHERE Cust_Salary IS NOT NULL'です – GarethD

+3

あなたは以前の質問に対する私の答えを覚えているかもしれません:http://stackoverflow.com/questions/9799358/sql-query-task-in-ssisまたSQLとSSISの違いを理解してください。あなたはSSISに関する多くの質問をしていますが、これまでのほとんどの場合、SSISに関するものではなく、SQLに関するものです。これは別のケースです。 – Pondlife

+0

@manoj:あなたは**本当に** SQLの学習を始めるべきです! –

答えて

2

ダレン・デイヴィスの答えが正しいようだが、いくつかのあいまいな理由で社員を持っている場合もありますID列と一致する必要があります。また、Employeeテーブル内の既存のエントリが正しい顧客と一致していると仮定すると、Database BBBに接続されているSSISでExecute SQLタスクを使用して次を実行できます。

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 

これにより、各テーブルのIDフィールドの整合性が維持され、新しい顧客のみがEmployeeテーブルに挿入されます。

+0

SSISでSQL実行タスクなしで上記の作業を行うことができます –

+0

SSISでこれを行う必要がある理由を説明できますか? EmployeeIDはID列ですか? – GarethD

+0

その理由は、私がSSIS.yaでこの作業を行う必要がある理由を説明するのが難しいです。Employee_IDはID列です。 –

2

何を試しましたか?

2つの接続が必要です.1つはDBごとに1つ、データフローコンポーネントには1つのOleDBSourceとOleDBDestinationコンポーネントがあります。

OleDBSourceでは、接続を選択してクエリを作成してから、緑色の矢印をOleDBDestinationにドラッグできます。 OleDBDestinationの選択先の接続とテーブルをダブルクリックし、マッピングをクリックします。

それはあなたがSSISでのタスクを実行し、以下を実行してSQLを作成することができ

+0

SSISでSQL実行タスクなしで上記の作業を行うことができます –

+0

はい、SQL実行タスクが必要な理由がわかりません – Diego

+0

SQl実行タスクが不要です –

3

であるべき:

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)の括弧内に挿入し、少なくとも1つのテーブル(AAA..CustomerまたはBBB..Employee)のデータベース名を完全に修飾するには、これは同じサーバーにあると仮定しています。 – GarethD

+0

私はこの作業をSSISにするだけです –

+2

これはSSISで私の投稿に記載されているようにSQL Execute Taskオブジェクトを作成することで機能します。 Gareth、あなたがコメントして変更する前に私はそれを見つけました。ありがとう –

関連する問題