Получая нечетную ошибку, использование запроса SQL Server 'С' пунктом

Следующий запрос:

WITH 
    CteProductLookup(ProductId, oid) 
    AS 
    (
        SELECT p.ProductID, p.oid
        FROM [dbo].[ME_CatalogProducts] p 
    )

SELECT 
    rel.Name as RelationshipName,
    pl.ProductId as FromProductId,
    pl2.ProductId as ToProductId
FROM 
    (
    [dbo].[ME_CatalogRelationships] rel 
    INNER JOIN CteProductLookup pl 
    ON pl.oid = rel.from_oid
    ) 
    INNER JOIN CteProductLookup pl2 
    ON pl2.oid = rel.to_oid
WHERE
    rel.Name = 'BundleItem' AND
    pl.ProductId = 'MX12345';

Генерирует эту ошибку:

Сообщение 319, Уровень 15, состояние 1, Строка 5 Неправильных синтаксисов около ключевого слова 'с'. Если этот оператор является общим выражением таблицы, xmlnamespaces пунктом или пунктом контекста отслеживания изменений, предыдущий оператор должен быть завершен с точкой с запятой.

На выполнении только. Нет никаких ошибок/предупреждений в sql операторе в студии управления.

Какие-либо идеи?

43
задан marc_s 30 April 2010 в 19:25
поделиться

3 ответа

всегда используйте оператор with, например ; WITH , тогда вы никогда не получите эту ошибку. Команда WITH требует ; между ней и любой предыдущей командой, всегда используя ; WITH , вам никогда не придется помнить об этом.

см. WITH common_table_expression (Transact-SQL) , из раздела Рекомендации по созданию и использованию общих табличных выражений:

Когда CTE используется в операторе, который является частью пакета, за оператором перед ним должна стоять точка с запятой .

89
ответ дан 26 November 2019 в 22:37
поделиться

Допускается ставить точку с запятой непосредственно перед ключевым словом WITH.

5
ответ дан 26 November 2019 в 22:37
поделиться
;WITH 
    CteProductLookup(ProductId, oid) 
    AS 
...
17
ответ дан 26 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: