Как ключевое слово With работает в SQL?

Так много раз видел with и так много раз SQL Server спрашивал, что перед ним стоит ;

Как работает ;with ...??

;with coords(...) as (
SELECT * ...
)

Почему перед ним должно стоять ;?


person edgarmtze    schedule 07.03.2011    source источник
comment
Вы, должно быть, видели это при создании ограничений для ваших таблиц WITH ( PAD_INDEX = OFF , STATISTICS_NORECOMPUTE = OFF , IGNORE_DUP_KEY = OFF , ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON ), что приводит к многократному контекстуальному использованию ключевого слова with вместе с общим табличным выражением. Точка с запятой позволяет избежать путаницы, которая может возникнуть в сознании SQL Server при анализе запроса.   -  person RBT    schedule 12.08.2016


Ответы (4)


В SQL точка с запятой используется для завершения запроса. Помещая его перед таким запросом, просто убедитесь, что база данных понимает, что любой предыдущий запрос закончился.

Первоначально это требовалось после каждого запроса, поскольку они вводились построчно, поэтому база данных должна была знать, когда выполнять запрос. Когда весь запрос отправляется в виде одной строки, точка с запятой нужна только в том случае, если синтаксиса SQL недостаточно, чтобы определить, где заканчивается запрос. Поскольку ключевое слово with используется по-разному, перед ним иногда требуется точка с запятой, чтобы убедиться, что оно не является частью предыдущего запроса.

person Guffa    schedule 07.03.2011

Использование WITH для CTE требует, чтобы предыдущая инструкция заканчивалась на ;. Использование его в начале гарантирует правильный синтаксис

То же самое делает MERGE в SQL Server 2008.

См. этот вопрос SO: Неверно синтаксис рядом с ключевым словом 'with'... предыдущий оператор должен заканчиваться точкой с запятой

person gbn    schedule 07.03.2011

Лучше всего завершать каждый оператор SQL точкой с запятой. В документации по SQL Server (например, здесь) предлагается сделать это обязательно. в будущей версии на самом деле нет оправдания тому, чтобы не войти в привычку сейчас.

Чтобы ответить на вопрос: вы видите ;WITH... в Stackoverflow, потому что ЛИБО человек, который отвечает, является неаккуратным кодером, ИЛИ тот, кто отвечает, предполагает, что человек, задающий вопрос, является небрежным кодером (и они будут утверждать, что это последнее, когда это первое :) Определение «неаккуратный кодер» здесь — это тот, кто использует точку с запятой только тогда, когда его вынуждают это делать.

person onedaywhen    schedule 07.03.2011
comment
Соглашения о синтаксисе Transact-SQL (msdn.microsoft.com/en-us/library/ ms177563.aspx) терминатор оператора Transact-SQL. Хотя точка с запятой не требуется для большинства инструкций в этой версии SQL Server, она потребуется в будущей версии. - person JV.; 22.12.2011

Использование WITH предназначено для общих табличных выражений (CTE). Они пытались заставить CTE быть определенным как первый оператор (т.е. не может быть связан с другими частями запроса, поэтому;)

person judda    schedule 07.03.2011