在我的MS SQL Server 2008上,我有一个数据库表,它接收一个我无法通过巨大的外部数据源控制的订阅源。该表用于许多生产过程。在饲料期间,整个餐桌被截断,然后每小时重新填充。这个过程只需要大约5-10秒,但是使用这些数据偶尔会对基于Web的进程造成打击。
我有另一个表,它与被替换数据的结构相同,它反映了上一次成功提要的数据的最后一个好快照。为了在没有大量杂技的情况下修复问题,我想创建一个指向主表的视图(如果已填充),或者如果未填充主表,则创建最后一个正常快照的影子/克隆表。
我已经尝试了两个关于如何解决这个问题的想法,但我无法正常工作。使用增量更新不是一个可行的选择,因为更新修改的记录所需的时间比完成更改的时间长1小时。这只是假设是5-10秒窗口向上更新的创可贴,因此所有查询都可以引用一个实时抽象视图来消除复杂性。
关于如何解决这个怪物的任何想法?
方法A
使用存储过程我可以轻松地执行此操作...
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE sp_v_feed
AS
BEGIN
IF (
(SELECT COUNT(F.asset_tag) AS records FROM feed F)
>
(SELECT COUNT(FS.asset_tag) AS records FROM feed_shadow FS)
) AND (
(SELECT COUNT(F.asset_tag) AS records FROM feed F) < 80000
)
SELECT * FROM feed_shadow;
ELSE
SELECT * FROM feed;
END
GO
但我如何看待这个? (抛出语法错误)
CREATE VIEW v_feed AS EXEC sp_v_feed
方法B
只是制作视图的另一条路线似乎也不起作用:
CREATE VIEW v_feed
IF (
(SELECT COUNT(F.id) AS records FROM feed F)
>
(SELECT COUNT(FS.id) AS records FROM feed_shadow FS)
) AND (
(SELECT COUNT(F.id) AS records FROM feed F) < 10000000
)
SELECT * FROM feed_shadow;
ELSE
SELECT * FROM feed;
答案 0 :(得分:0)
我认为一个表值函数会让你得到你想要的东西。
看看Cade Roux对这个问题的回答: TSQL - If..Else statement inside Table-Valued Functions - cant go through
如果您不熟悉表值函数,则可以查询表值函数,就像查询视图一样。