Почему операторы Transact-SQL не должны группироваться в одном пакете?

Описание TechNet BEGIN...END меня смущает следующим замечанием:

Хотя все операторы Transact-SQL допустимы в блоке BEGIN...END, некоторые операторы Transact-SQL не следует группировать в одном пакете (блоке операторов).

https://technet.microsoft.com/en-us/library/aa225998(v=sql.80).aspx

Может кто-нибудь сказать мне, почему они не должны быть сгруппированы в пределах блока BEGIN...END? Есть ли проблема, когда я использую BEGIN...END для создания региона, как это предложение: sql server #region?

3 ответа

Решение

Если вам нужно создать несколько пакетов в сценарии T-SQL, вам нужно явно разделить группу команд с помощью GO заявление. Таким образом, блок BEGIN...END (пакетный) создается неявно, даже если вы явно не добавляете его в свой код. Так что добавление этого явно не должно создавать никаких дополнительных проблем для вас.

Некоторые команды не могут быть сгруппированы в один пакет, как указано в связанной статье MSDN:

Операторы CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TRIGGER и CREATE VIEW нельзя объединять с другими операторами в пакете. Оператор CREATE должен начинать пакет. Все остальные операторы, которые следуют в этом пакете, будут интерпретироваться как часть определения первого оператора CREATE.

Таблица не может быть изменена, а затем новые столбцы, на которые есть ссылки в том же пакете.

Если оператор EXECUTE является первым оператором в пакете, ключевое слово EXECUTE не требуется. Ключевое слово EXECUTE необходимо, если оператор EXECUTE не является первым оператором в пакете.

BEGIN..END - это не визуальный вариант для того, чтобы иметь возможность свернуть регион, вы на самом деле говорите серверу, что эти кучки строк вместе. Использование его в качестве #region - это просто обходной путь.

Это связано с тем, что все, что находится между BEGIN и END, будет выполнено как пакет, и к нему будут применяться все правила пакета.

Подумайте, что произойдет, если в одном из операторов произойдет ошибка. Хотите ли вы, чтобы другие операторы продолжались?

Проверьте больше здесь: партии

Вы можете использовать комментарии, чтобы различать различные партии, как показано ниже.

BEGIN /** Region1 Starts**/
....
....
....
END /** Region1 ends**/

BEGIN /** Region2 Starts **/
....
....
....
END /** Region2 Ends **/
Другие вопросы по тегам