我有一个长视图,主要由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
但是,我并不确定如何在运行此代码时运行此存储过程或代码。最后我想添加逻辑,检查查询是否已经运行。如果它今天已经运行,那么请不要再次创建此表。
答案 0 :(得分:3)
此问题的内置解决方案称为物化视图(请参阅here)。这些是具体化的视图(存储为表/缓存)。视图可以逐步更新,也可以按计划重新构建。
答案 1 :(得分:0)
不必要的长视角。
为什么你有子表但是要选择表?
你为什么放弃桌子。截断比删除和创建更快。
insert INTO [GuitarMarketing].[dbo].[NetNewCustomers]
SELECT CustomerId
, DateFirstPurchase
, PurchaseDate
, PurchaseId
FROM AllCustomerPurchases
WHERE PurchaseDate = DateFirstPurchase
如果PurchaseDate和DateFirstPurchase上的索引应该很快 不明白为什么你需要实现这一点。