2011-12-28 15 views
0

私のデータベースでジョブをスケジュールする予定で、基本的に毎日午後5時に実行されます。SQL Server - スケジュールジョブ1つのデータベースから別のデータベースにデータを取得する

データベース1:TESTONEテーブル名:MyTableと

データベース2:TestTwoテーブル名:MyTableと

私のスケジュールジョブがMyTableとにTESTONEと挿入内に存在し、値がTestTwo.MyTableから来て を持っています。

似たような例がありますか?これは、TestTho.MyTableのTestOne.MyTableアクセス権からユーザーを取得するのと同じくらい簡単ですか?

入力いただきありがとうございます。

+0

マスターテーブルのサイズを少し増やしてください。増分更新が必要な場合は、ターゲットテーブル(すべてのFKeys)のすべてのデータを削除できますか? –

+0

SSISを使用していますか?データベースは同じサーバーか別のサーバーにありますか? – thursdaysgeek

+0

@Oleg Dok - 現在、テーブルを削除して再作成することができます。私は増分更新を提案しました。 – kalls

答えて

0

いくつかの単純なシナリオ(仮定 - 私は切り捨てを行うことができます):

truncate table TestOne.dbo.MyTable 
insert TestOne.dbo.MyTable(fieldslist) 
select fieldslist from TestTwo.dbo.MyTable 

OR

(より多くの増分が、一意のキーを必要とするような)マージを使用して:

MERGE TestOne.dbo.MyTable T 
USING (SELECT fieldslist from TestTwo.dbo.MyTable) S 
ON T.UniqueKey = S.UniqueKey 
WHEN MATCHED THEN UPDATE SET 
    field1=S.field1, 
    ... 
WHEN NOT MATCHED THEN 
    insert (fieldslist) 
    VALUES(fieldslist) 
WHEN NOT MATCHED BY SOURCE DELETE; 
1

ユーザーは両方のデータベースに対して十分な権限を持っている必要があります(TestTwo.MyTable/TestOne.MyTableからの読み取り)。

他に必要なのは、一方のデータベースにアクセスするための正しい構文です。
ジョブがTestOneに常駐している場合、クエリは(未テスト、私の頭のうちの)このように見ています

use TestOne 

insert into MyTable (Column1, Column2, ...) 
select Column1, Column2, ... 
from TestTwo.dbo.MyTable 

他のデータベースにアクセスする際に重要なことは順序である:(私の例ではDatabase.Schema.Table
TestTwo.dbo.MyTable)デフォルトのスキーマdboを使用しました。テーブルに異なるスキーマがある場合は、そのテーブルを変更する必要があります。

関連する問題