Подтвердить что ты не робот

Получение нечетной ошибки, запрос SQL Server с использованием предложения WITH WITH

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

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';

Вызывает эту ошибку:

Msg 319, уровень 15, состояние 1, строка 5 Неправильный синтаксис рядом с ключевым словом 'с'. Если это утверждение является общим табличное выражение, пространство имен xml или контекст отслеживания изменений, предыдущее выражение должно быть заканчивается точкой с запятой.

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

Любые идеи?

4b9b3361

Ответ 1

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

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

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

Ответ 2

;WITH 
    CteProductLookup(ProductId, oid) 
    AS 
...

Ответ 3

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