0

私はSQLで新しいです、私はMS Serverを使用しています。Sqlテーブルを切り替える方法

私は2つのテーブルにそれらのいずれかを持っている歴史(cdr_hist)のデータを他のテーブルを持っている今日(cdr_stage)からのデータを持っています。私のスクリプトは30分ごとに実行し、過去4時間のデータを計算する必要がありますが、毎晩12時にすべてのデータはcdr_histに移動します。

質問は、私はこれを試してみてください ... cdr_stageが空であるので、私は切り替えて、スクリプトが12:00に実行したときに、履歴テーブルからデータを取ることができる方法である。

IF OBJECT_ID ('[**CDR_Stage**]') IS NOT NULL 
BEGIN 
    Select..... 
    From **CDR_Stage** 
END 
ELSE 
    Select..... 
    From **CDR_Hist** 
END 

しかし、その正常に動作しません... アイデアは何ですか?

+2

_ただし、正しく動作しません。どういう意味ですか? –

+0

あなたはどんなエラーがありますか? –

+0

実際には動作しますが、すべてのデータが計算されません。私は午後11時30分から午前12時30分まで行を失う – Kalkov

答えて

0

あなたがUNIONNOT EXISTS()を使用して、テーブルの存在の代わりに

DECLARE @sql VARCHAR(4000) 

SET @sql = 'select * from ' 
      + CASE 
       WHEN EXISTS (SELECT 1 
          FROM CDR_Stage) THEN 'CDR_Stage' 
       ELSE 'CDR_Hist' 
      END 

EXEC (@sql) 
3

純粋なSQLで行うことができますIFのための必要はありませんが、

IF EXISTS (SELECT 1 
      FROM CDR_Stage) 
    SELECT * 
    FROM CDR_Stage 
ELSE 
    SELECT * 
    FROM CDR_Hist 

または動的SQLを記録有無をチェックする必要があります。

SELECT * FROM CDR_Stage 
UNION ALL 
SELECT * FROM CDR_Hist 
WHERE NOT EXISTS(SELECT 1 FROM CDR_Stage) -- Second select will return data only if first one won't . 
関連する問題