我因此创建了一个 SQL Server 2012 Enterprise 视图 -
CREATE VIEW [dbo].[vTest]
AS
WITH cte_LCH AS
(
select *, Rank = ROW_NUMBER() OVER (PARTITION BY ClaimId ORDER BY Id DESC)
from ClaimHistories
where Status in (1,2)
)
SELECT TOP (100) PERCENT dbo.Claims.Id AS ClaimId, cte_LCH.Id AS ClaimHistoryId,
dbo.Claims.PlanId, dbo.Providers.ChainId, dbo.Claims.MemberId
FROM dbo.TxDetails RIGHT OUTER JOIN
cte_LCH ON dbo.TxDetails.Id = cte_LCH.TxDetailId LEFT OUTER JOIN
dbo.ClaimHistoryPrices ON cte_LCH.Id = dbo.ClaimHistoryPrices.ClaimHistoryId RIGHT OUTER JOIN
dbo.Claims INNER JOIN
dbo.Providers ON dbo.Claims.ProviderId = dbo.Providers.Id INNER JOIN
dbo.Members ON dbo.Claims.MemberId = dbo.Members.Id ON cte_LCH.ClaimId = dbo.Claims.Id
WHERE cte_LCH.Rank = 1
ORDER BY ClaimId
但是当我要求 SSMS“设计”保存的视图时,它只显示了这个 -
SELECT *, Rank = ROW_NUMBER() OVER (PARTITION BY ClaimId
ORDER BY Id DESC)
FROM ClaimHistories
WHERE Status IN (1, 2))
SELECT TOP (100) PERCENT dbo.Claims.Id AS ClaimId, cte_LCH.Id AS ClaimHistoryId, dbo.Claims.PlanId, dbo.Providers.ChainId, dbo.Claims.MemberId
FROM dbo.TxDetails RIGHT OUTER JOIN
cte_LCH ON dbo.TxDetails.Id = cte_LCH.TxDetailId LEFT OUTER JOIN
dbo.ClaimHistoryPrices ON cte_LCH.Id = dbo.ClaimHistoryPrices.ClaimHistoryId RIGHT OUTER JOIN
dbo.Claims INNER JOIN
dbo.Providers ON dbo.Claims.ProviderId = dbo.Providers.Id INNER JOIN
dbo.Members ON dbo.Claims.MemberId = dbo.Members.Id ON cte_LCH.ClaimId = dbo.Claims.Id
WHERE cte_LCH.Rank = 1
ORDER BY ClaimId
并且没有显示“WITH”子句,所以实际上我无法实际编辑和保存视图,因为额外的 ')' 字符导致语法错误,如果我复制,它不是可执行代码。但是,如果我将视图编写到查询窗口中,我会在创建时获得原始代码。然而,CTE 的观点似乎运作良好。
我的问题是——这正常吗?可以在这样的视图中使用 CTE 吗?如果我要求 SSMS 设计保存的视图,我应该看到 WITH 子句吗?
谢谢,戴夫