我是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
但它不能正常工作...... 任何想法??
答案 0 :(得分:3)
不需要IF,可以使用UNION
和NOT 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)