2017-08-09 10 views
0

あるデータベースから別のデータベースにデータをコピーする必要があるという問題があります。データをリアルタイムで利用できるとは決して保証されません。 1日に5日間のデータを処理する必要があるかもしれません。処理日は、翌日の午前7時から午前6時59分まで、例えば2017-08-01 07:00と2017- 08-02 06:59。SQLでループ状の操作を実行してあるテーブルから別のテーブルにデータをコピーする方法

私は任意のループ構造が可能ですが、私は必要なSQL文の中に、以下の擬似コードを変換する方法がわからないことなく、しかし、これ任意の助けをいただければ幸いSQLを使用したい

declare @lastDate datetime 
set @lastDate = (select max(dc) from dmt) 

do 
    if gettime() => 07:00 then 
     if @lastDate < getdate() then 
      insert id, dc into dmt where dc between @lastdate and @lastdate + 1 day from othertable 
     end if 
    end if 

    set @lastDate = (select max(dc) from dmt) 
while @lastDate < getdate() 

私はSQL Express 2012を使用しています。idはintで、dcはdatetimeです。 dmtはコピーした情報を保存したいテーブルで、othertableはコピー元の場所です。

ありがとうございました。

+1

「Cursorの例に – Sparrow

+0

を見て日ごとに異なる送信元と宛先のですか?毎日繰り返すのではなく、ただちにそれを行うことができない理由はありますか? – Xedni

+0

Xedniの意味がわかりません。新しいレコードは毎日異なる時刻に毎日他のテーブルに追加されます。毎日、それらを集計してdmtテーブルにコピーする必要があります。毎週。要約されたデータのみが保持され、dmtに毎日の要約レコードが含まれていることを確認する必要があります。 – beliskna

答えて

0

これは、SQLを使用するとコードがどのように表示され、必要な日時にSQLジョブタスクをスケジュールする必要があると思います.SQL Server Express Edition

How to create jobs in SQL Server Express edition

declare @lastDate datetime 
set @lastDate = (select max(dc) from dmt) 


INSERT INTO DMT(ID,DC) 

    SELECT ID,DC 
    FROM OTHER_TABLE 
    WHERE DC BETWEEN @LASTDATE AND DATEADD(DAY,1,@lastDate) 
    AND DATEPART(HOUR,TIME_FIELD) >=7 
+0

私はロナウドがうまくいくとは思わないが、他のテーブルにあるかもしれないすべての日をカバーするためには、反復の要素が必要である...毎日私にアクセスできないテーブルは、テーブルとして与えられるダンプ。 – beliskna

+0

selectステートメントは、必要なすべての行を含むデータセットを返します。ループを構築する必要はないと思います。 –

+0

そして、他のテーブルに10日間分の情報が含まれているとどうなりますか?ループなどがなければ、新しいテーブルには最後の日付と翌日のみが含まれます。 – beliskna

関連する問題