Как работает ключевое слово «С» в SQL? - PullRequest
7 голосов
/ 07 марта 2011

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

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

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

Почему должно быть ; перед этим?

Ответы [ 4 ]

14 голосов
/ 07 марта 2011

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

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

5 голосов
/ 07 марта 2011

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

Так же, как и MERGE в SQL Server 2008

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

2 голосов
/ 07 марта 2011

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

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

1 голос
/ 07 марта 2011

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

...