Это ошибка SQL Server Management Studio?

Таким образом, я создаю представление 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 в таком представлении? Должен ли я видеть предложение WITH, если я прошу SSMS спроектировать сохраненное представление?

Спасибо, Дэйв


person Dave    schedule 13.10.2014    source источник
comment
Какой у Вас вопрос? это больше похоже на сообщение об ошибке, чем на вопрос. Если вы хотите сообщить об ошибке в Microsoft, сообщите об этом на сайте подключения.   -  person Scott Chamberlain    schedule 13.10.2014
comment
Очевидно, мой вопрос был - это нормально или ошибка?   -  person Dave    schedule 13.10.2014
comment
Верхние 100 процентов в представлении бессмысленны. Вывод вашего представления не обязательно будет в таком порядке. Если вам нужны данные в определенном порядке, они ДОЛЖНЫ быть упорядочены в запросе, который их извлекает. Подумайте, каким был бы порядок, если бы у вас было два представления, и у них был бы конфликтующий порядок предложений. Какой из них победит. Если вы хотите заказать, есть один и только один способ обеспечить порядок, заказ по пункту.   -  person Sean Lange    schedule 13.10.2014
comment
Лучшим вариантом, чем использование ужасного визуального дизайнера, является использование t-sql. :)   -  person Sean Lange    schedule 13.10.2014
comment
Прекратите создавать представления. Дизайнер ужасный. Щелкните правой кнопкой мыши, просмотр сценария как, изменение, новое окно редактора запросов.   -  person Aaron Bertrand    schedule 14.10.2014
comment
@Шон - Спасибо. Я знаю о топ-100 и заказываю, но это то, что я получил от дизайнера. Хотя не мой вопрос.   -  person Dave    schedule 14.10.2014
comment
Дизайнер представления был создан в чем, SQL Server 2000? Общие табличные выражения по состоянию на 2005 год. Его, как и многих визуальных дизайнеров, следует избегать, поскольку они являются нелюбимыми, заброшенными кусками мусора.   -  person billinkc    schedule 14.10.2014
comment
Конечно, мне бы хотелось обновленный дизайнер с кросс-базой данных, CTE и т. д., но SQL не является моей главной задачей, поэтому используйте SSMS Designer для быстрого и грязного. Тем не менее, это ошибка в дизайнере, как есть, или я что-то не так делаю с CTE?   -  person Dave    schedule 14.10.2014
comment
Вы можете довольно легко найти ответ на этот вопрос, попробовав запустить [исходный] оператор CREATE VIEW в окне запроса.   -  person Andriy M    schedule 14.10.2014
comment
@Andriy Андрей - как я уже упоминал, если я создаю сценарий представления, я отлично получаю оригинал, это просто дизайн, который, кажется, неправильно отображает предложение CTE.   -  person Dave    schedule 14.10.2014
comment
Я спишу это на ошибку в конструкторе SSMS. Может ли кто-нибудь порекомендовать достойного стороннего дизайнера, если мы не должны использовать прилагаемый дизайнер?   -  person Dave    schedule 14.10.2014


Ответы (2)


TOP 100 PERCENT ORDER BY in View работал в SQL Server 2012 и не работает в SQL Server 2014 — я бы классифицировал это как ОШИБКУ, независимо от выбора дизайна других людей :)

person frigate    schedule 21.10.2014

Согласно MSDN:

CTE также может быть указан в операторе CREATE VIEW как часть определяющего оператора SELECT представления.

Так что мне кажется, что вы нашли ошибку в конструкторе SQL Server Management Studio. В другом сообщении говорится, что та же проблема возникла в SQL Server 2008 R2.

(Другая ссылка на TechNet говорит то же самое. вещь о создании представлений с CTE.)

person Paul Williams    schedule 21.10.2014