Мне было интересно, есть ли какой-нибудь способ сделать область действия с оператором больше, чем просто для первого оператора после с, например
WITH cr AS (SELECT TOP 1 * FROM @rq ORDER BY h, f)
SELECT * FROM cr
DELETE cr FROM @rq
к моменту достижения строки DELETE cr FROM @rq
SQL SERVER больше не запоминает, что такое cr
и выдает ошибку Invalid object name 'cr'.
, я попытался добавить блоки начала и конца, чтобы это выглядело как
WITH cr AS (SELECT TOP 1 * FROM @rq ORDER BY h, f)
BEGIN
SELECT * FROM cr
DELETE cr FROM @rq
END
но это неверно и выдает ошибку Incorrect syntax near the keyword 'BEGIN'.
Можно ли расширить область действия оператора with или он всегда был создан для немедленного использования, а затем уже недоступен?
Примечание:
WITH cr AS (SELECT TOP 1 * FROM @rq ORDER BY h, f)
DELETE cr FROM @rq
работает как
WITH cr AS (SELECT TOP 1 * FROM @rq ORDER BY h, f)
SELECT * FROM cr
поэтому оба оператора допустимы, если используется оператор with