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