【发布时间】:2014-08-01 18:42:59
【问题描述】:
在我的一个较大的表格中,旧记录被移动到以季度和年份为后缀的单独表格中。例如,SILO_q1_2014
对于历史查询,我通常使用包含当前表和所有历史表的视图。这将包括上一季度,例如q2_2014,但一旦我们进入 2014Q4 并创建新的 q3_2014 表,就会过期。
那么,让这个视图与最新季度表保持同步的最佳方式是什么?
ALTER VIEW [dbo].[v_SILO]
AS
SELECT *
FROM dbo.SILO
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q2_2014
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q1_2014
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q4_2012
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q3_2012
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q2_2012
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q1_2012
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q4_2011
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q3_2011
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q2_2011
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q1_2011
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q4_2010
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q3_2010
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q2_2010
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q1_2010
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q4_2009
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q3_2009
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q2_2009
WHERE active_flag = 1
UNION ALL
SELECT *
FROM dbo.SILO_q1_2009
WHERE active_flag = 1
GO
注意:这是在 SQL 2000 数据库中
【问题讨论】:
-
这里的最新是什么意思?您是否发现很难在每个季度重新创建视图?
-
已编辑。包括最新季度的最新含义(下一个是 q3_2014)。当有多个像这样引用多个季度的视图时,这很困难。
-
必须是视图吗?如果您可以使用返回相同数据的存储过程,那么您可以使用动态 sql 使其自动更新。
-
我在其他查询和存储过程中使用此视图(将其视为表),因此我认为存储过程不会轻易取代它。
标签: sql-server views sql-server-2000 union-all