«GO» похож на; во многих случаях, но на самом деле означает конец партии.
Каждый пакет фиксируется при вызове оператора "GO", поэтому если у вас есть:
SELECT * FROM table-that-does-not-exist;
SELECT * FROM good-table;
в вашем пакете, тогда выбор хорошей таблицы никогда не будет вызван, потому что первый выбор вызовет ошибку.
Если у вас вместо этого было:
SELECT * FROM table-that-does-not-exist
GO
SELECT * FROM good-table
GO
Первый оператор выбора по-прежнему вызывает ошибку, но поскольку второй оператор находится в своем собственном пакете, он все равно будет выполняться.
GO не имеет ничего общего с совершением транзакции.