Sql如何切换表

时间:2017-01-03 15:26:01

标签: sql-server tsql if-statement switch-statement multiple-tables

我是SQL新手,我使用的是MS Server。

我有两个表,其中一个表有历史( cdr_hist )数据,其他表格中包含今天的数据( cdr_stage )。我的脚本必须每30分钟运行一次并计算最近4小时的数据,但每晚12点,所有数据都会移动到 cdr_hist

问题是当脚本在12:00运行时我如何从历史表中切换和获取数据,因为 cdr_stage 为空... 我试试这个:

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

但它不能正常工作......  任何想法??

2 个答案:

答案 0 :(得分:3)

不需要IF,可以使用UNIONNOT EXISTS()使用纯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 .

答案 1 :(得分:0)

您需要检查记录是否存在而不是表存在

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

或动态Sql

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)