我有一个很长的视图,主要由CTES中的SELECT语句组成。我的其中一个CTE执行时间太长,所以我决定将结果存储在一个表中。在运行查询时,我是否可以每天至少更新一次这个表?
这是我用来创建表的内容:
WITH NetNewCustomers AS
(
SELECT
CustomerId
, DateFirstPurchase
, PurchaseDate
, PurchaseId
FROM
AllCustomerPurchases
WHERE
PurchaseDate = DateFirstPurchase
)
SELECT
*
INTO
[GuitarMarketing].[dbo].[NetNewCustomers]
FROM
(
SELECT
*
FROM
NetNewCustomers
)
AS CTE
我尝试创建一个存储过程,如下所示:
CREATE PROCEDURE my_sp AS
IF EXISTS (SELECT * FROM NetNewCustomers) DROP TABLE NetNewCustomers;
WITH NetNewCustomers AS
(
SELECT
CustomerId
, DateFirstPurchase
, PurchaseDate
, PurchaseId
FROM
AllCustomerPurchases
WHERE
PurchaseDate = DateFirstPurchase
)
SELECT
*
INTO
[GuitarMarketing].[dbo].[NetNewCustomers]
FROM
(
SELECT
*
FROM
NetNewCustomers
)
AS CTE
END
但不是,我不确定如何让这个存储过程或代码在运行此代码时运行。最后,我想添加一些逻辑来检查今天是否运行了查询。如果今天已经运行过了,那么就不要再创建这个表。
发布于 2018-05-31 18:31:41
不必要的长远观点。
为什么你有一个子表,它只是一个表的select?
你为什么要把桌子扔掉。Truncate比drop和create快。
insert INTO [GuitarMarketing].[dbo].[NetNewCustomers]
SELECT CustomerId
, DateFirstPurchase
, PurchaseDate
, PurchaseId
FROM AllCustomerPurchases
WHERE PurchaseDate = DateFirstPurchase
如果在PurchaseDate和DateFirstPurchase上有索引,应该会更快。
不明白为什么你需要实现这一点。
https://stackoverflow.com/questions/50611365
复制相似问题