Это не является прямым ответом на ваш вопрос, но, возможно, вы можете подумать об этом:
Кажется, что SQL Server ограничивает семантику (не обязательно синтаксис) SQL, где имеет смысл это делать.Например, вы не можете иметь подзапрос с предложением ORDER BY
, если вы также не укажете предложение TOP n
.Это имеет смысл, поскольку упорядоченные подзапросы бессмысленны, если у них нет ограничений.Другие СУБД допускают такую бессмысленность.
В вашем случае (это всего лишь предположение) наличие CTE в подзапросах имеет лишь ограниченный смысл, поскольку вы можете переписать весь запрос так, чтобы CTE были объявлены в верхней части.самый высокий уровень.Единственное различие, которое у вас будет, - это объем и, возможно, читаемость каждого объявления.
С другой стороны, CTE допускает рекурсивные запросы, которые могут быть очень трудны для применения, когда CTE объявляются в подзапросах.
Поскольку вам необходимо реализовать независимый от базы данных SQL, я рекомендую вам пока не использовать CTE интенсивно.Если CTE простые, вы всегда можете переписать их как простые представления ...