【发布时间】:2014-10-13 19:04:20
【问题描述】:
我因此创建了一个 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 子句吗?
谢谢,戴夫
【问题讨论】:
-
您的问题是什么?这听起来更像是一个错误报告而不是一个问题。如果您想向 Microsoft 报告错误,请在 connect site 上报告。
-
显然我的问题是 - 这是正常的还是错误的?
-
视图中的前 100% 毫无意义。您的视图的输出不保证按该顺序排列。如果您希望数据按特定顺序排列,则必须在检索它的查询中对其进行排序。考虑一下如果您有两个视图并且它们的子句顺序冲突,那么顺序会是什么。哪一个会“赢”。如果您想订购,则只有一种方法可以确保订单,即 order by 子句。
-
比使用糟糕的视觉设计器更好的选择是使用 t-sql。 :)
-
停止“设计”视图。设计师太可怕了。右键单击,脚本视图为,更改为,新的查询编辑器窗口。
标签: tsql common-table-expression sql-view ssms-2012