Получение нечетной ошибки, запрос 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 в студии управления нет.
Любые идеи?
Ответы
Ответ 1
всегда используйте с оператором вроде ;WITH
тогда вы никогда не получите эту ошибку. Команда WITH требует a ;
между ним и любой предыдущей командой, всегда используя ;WITH
вам никогда не придется помнить, чтобы сделать это.
смотрите WITH common_table_expression (Transact-SQL), в разделе Рекомендации по созданию и использованию выражений общих таблиц:
Когда CTE используется в операторе, являющемся частью пакета, перед оператором должна стоять точка с запятой.
Ответ 2
;WITH
CteProductLookup(ProductId, oid)
AS
...
Ответ 3
Должно быть законным поставить точку с запятой непосредственно перед ключевым словом WITH.