SQL Server 2008 R2 - запрос из SSMS 2014 года, но также не выполняется из кода.
Странно - первая ссылка на таблицу B работает, вторая - с ошибкой «Недопустимый объект B». Что я делаю неправильно? GO не помогают.
WITH B as (SELECT BatchOutId, SettleMerchantCode, BatchDate, BatchStatusCode, BatchTransCnt, BatchTotAmt, BatchAdjustAmt, BatchAdjustCnt
FROM MAF01
GROUP BY BatchOutId, SettleMerchantCode, BatchDate, BatchStatusCode, BatchTransCnt, BatchTotAmt, BatchAdjustAmt, BatchAdjustCnt)
SELECT * FROM B ORDER BY BatchOutId DESC
SELECT * FROM B ORDER BY BatchOutId DESC
3 ответа
Cte действителен только для одного запроса, а не для всего пакета. Итак, как только вы выполните первый SELECT * FROM B, этот запрос будет завершен. Следующий запрос больше не имеет доступа к cte, который использовал первый запрос.
Это как и ожидалось.
CTE включены только в следующий оператор. Это просто именованные запросы.
Вам нужно будет либо
- Повторите определение CTE.
- Переместите определение в представление или встроенную функцию.
- Материализуйте результаты в временную таблицу.
В зависимости от того, чего вы ожидали.
Я знаю, что это должно быть дублировано
У вас может быть несколько CTE, но только один оператор
Два Select - это два утверждения
Если вы используете #temp, у вас может быть более одного оператора
Похожие вопросы
Новые вопросы
sql-server-2008
Используйте этот тег для вопросов, относящихся к версии Microsoft SQL Server 2008.