Пакетная или SQL-инструкция - PullRequest
6 голосов
/ 28 апреля 2010

а)

Оператор SQL - это одна команда SQL (например, SELECT * FROM table1 или SET NOCOUNT ON). Пакет, с другой стороны, представляет собой ряд операторов SQL, отправляемых на сервер для выполнения как единое целое. Операторы в пакете скомпилированы в единый план выполнения. Пакеты разделяются командой GO

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

b) Я предполагаю, что одно из основных различий между хранимой процедурой и пакетом состоит в том, что хранимые процедуры предварительно компилируются, а пакеты - нет?

1011 * спасибо *

1 Ответ

5 голосов
/ 28 апреля 2010

а. Только если каждый оператор SQL выполняется отдельно (скажем, в SSMS или на клиенте).

Два оператора = "партия" всегда, даже если GO не задействован. GO просто говорит инструментам, таким как SSMS, разбить подчиненные движку.

б. не совсем верно. Хранимая процедура предварительно анализируется, но не компилируется в план выполнения до тех пор, пока не будет вызвана, а не в кэше планов. Пакет анализируется и компилируется за один раз и может создать план многократного использования.

Редактировать, после комментария:

  • Термины «выписка» и «партия» - это два разных понятия
  • Любой текст, отправляемый в движок БД, является партией
  • текст в буквальном смысле таков: клиентские инструменты не выполняют обработку: только текст отправляется в механизм БД
  • текст состоит из операторов SQL

So

  • Пакет состоит как минимум из одного символа текста / одного оператора (но может быть 2, 20 или 20 000 операторов)
  • GO сообщает инструментам SQL, где разбить «блок текста» / «коллекцию операторов» на отдельные вызовы механизма БД (= пакеты)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...