а. Только если каждый оператор SQL выполняется отдельно (скажем, в SSMS или на клиенте).
Два оператора = "партия" всегда, даже если GO не задействован. GO просто говорит инструментам, таким как SSMS, разбить подчиненные движку.
б. не совсем верно. Хранимая процедура предварительно анализируется, но не компилируется в план выполнения до тех пор, пока не будет вызвана, а не в кэше планов. Пакет анализируется и компилируется за один раз и может создать план многократного использования.
Редактировать, после комментария:
- Термины «выписка» и «партия» - это два разных понятия
- Любой текст, отправляемый в движок БД, является партией
- текст в буквальном смысле таков: клиентские инструменты не выполняют обработку: только текст отправляется в механизм БД
- текст состоит из операторов SQL
So
- Пакет состоит как минимум из одного символа текста / одного оператора (но может быть 2, 20 или 20 000 операторов)
- GO сообщает инструментам SQL, где разбить «блок текста» / «коллекцию операторов» на отдельные вызовы механизма БД (= пакеты)