VIEW中的UPDATE语句?

时间:2018-05-30 18:32:53

标签: sql-server tsql stored-procedures

我有一个长视图,主要由CTES中的SELECT语句组成。我执行的其中一个CTE执行时间太长,所以我决定将结果存储在表中。无论如何我可以在查询运行时每天至少更新一次这个表吗?

这就是我用来创建表格的内容:

Scenario: login successfully
    Given I am in mypage
    When I fill the fields with data
        | key | value |
        | user | userValue |
        | pass| passValue |
    And I push on login button
    Then I am logged in with my credentials

我尝试创建这样的存储过程:

WITH NetNewCustomers AS
    (
        SELECT
            CustomerId
            , DateFirstPurchase
            , PurchaseDate
            , PurchaseId
        FROM 
            AllCustomerPurchases
        WHERE
            PurchaseDate = DateFirstPurchase


    )


    SELECT 
        * 
    INTO 
        [GuitarMarketing].[dbo].[NetNewCustomers] 
    FROM 
    (
        SELECT
             * 
        FROM 
            NetNewCustomers 
    ) 
        AS CTE

但是,我并不确定如何在运行此代码时运行此存储过程或代码。最后我想添加逻辑,检查查询是否已经运行。如果它今天已经运行,那么请不要再次创建此表。

2 个答案:

答案 0 :(得分:3)

此问题的内置解决方案称为物化视图(请参阅here)。这些是具体化的视图(存储为表/缓存)。视图可以逐步更新,也可以按计划重新构建。

答案 1 :(得分:0)

不必要的长视角。

为什么你有子表但是要选择表?

你为什么放弃桌子。截断比删除和创建更快。

insert INTO [GuitarMarketing].[dbo].[NetNewCustomers] 
SELECT    CustomerId
        , DateFirstPurchase
        , PurchaseDate
        , PurchaseId
FROM  AllCustomerPurchases
WHERE PurchaseDate = DateFirstPurchase  

如果PurchaseDate和DateFirstPurchase上的索引应该很快 不明白为什么你需要实现这一点。