Sql如何切换表格
Sql how to switch tables
我有两个 table,其中一个有历史(cdr_hist)数据,其他 table 有今天的数据(cdr_stage)。我的脚本必须每 30 分钟 运行 计算最近 4 小时的数据,但每天晚上 12 点所有数据移动到 cdr_hist.
问题是当脚本 运行 在 12:00 时我如何切换并从历史记录 table 中获取数据,因为 cdr_stage 是空的...
我试过这个:
IF OBJECT_ID ('[**CDR_Stage**]') IS NOT NULL
BEGIN
Select.....
From **CDR_Stage**
END
ELSE
Select.....
From **CDR_Hist**
END
但它无法正常工作...
有什么想法吗??
您需要检查记录是否存在,而不是 table 是否存在
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)
不需要 IF,可以使用 sql 使用 UNION
和 NOT EXISTS()
来完成:
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 .
我有两个 table,其中一个有历史(cdr_hist)数据,其他 table 有今天的数据(cdr_stage)。我的脚本必须每 30 分钟 运行 计算最近 4 小时的数据,但每天晚上 12 点所有数据移动到 cdr_hist.
问题是当脚本 运行 在 12:00 时我如何切换并从历史记录 table 中获取数据,因为 cdr_stage 是空的... 我试过这个:
IF OBJECT_ID ('[**CDR_Stage**]') IS NOT NULL
BEGIN
Select.....
From **CDR_Stage**
END
ELSE
Select.....
From **CDR_Hist**
END
但它无法正常工作... 有什么想法吗??
您需要检查记录是否存在,而不是 table 是否存在
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)
不需要 IF,可以使用 sql 使用 UNION
和 NOT EXISTS()
来完成:
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 .