Назад | Перейти на главную страницу

SQL Server: операторы против пакетов против транзакций против соединений

Мой вопрос прост: каковы различия / сходства / мощности между

в SQL Server?

Насколько я понимаю, соединение - это единый канал связи между экземпляром SQL Server и клиентом, внутри которого выполняются коллекции операторов, сгруппированных в пакеты. Пакет либо неявно, либо явно отображается на одну или несколько транзакций. Это верно?


Транзакции и пакеты - два независимых понятия. Оба могут использоваться в конфигурации "один ко многим".

Блоки транзакций - это единая «единица работы», концепция, согласно которой переданный sql должен либо полностью работать, либо не работать вообще. Например, если вы обновляете две таблицы, связанные друг с другом; оба должны быть успешными, чтобы изменение данных было зафиксировано. [https://msdn.microsoft.com/en-us/library/ms174377.aspx]

Пакетная обработка - это концепция Microsoft. Благодаря инструментам, созданным Microsoft, таким как sqlcmd и osql, пакет просто обеспечивает единый план выполнения. Например, если вы создадите переменную и используете ее вне пакета, инструмент выдаст ошибку. [https://msdn.microsoft.com/en-us/library/ms188037.aspx]

Таким образом, у вас может быть несколько пакетов, которые обновляют несколько таблиц внутри одного блока транзакции. Насколько они не нарушают индивидуальные планы выполнения партии, то есть.

Кроме того, в пакете вы можете иметь несколько блоков транзакций, обеспечивая целостность данных между объектами базы данных, такими как таблицы.

Соединение - это просто рукопожатие связи, которое подтверждает запуск запросов на сервере.

Заявления - это отдельные строки, образующие запрос. GO (разделитель пакетов T-Sql) и BEGIN TRANSACTION (ANSI SQL для запуска нового блока транзакции) являются операторами.

Довольно много.

Пакет - это всего лишь набор команд, которые необходимо выполнить. Транзакция - это набор команд, которые гарантированно завершатся успешно или полностью потерпят неудачу (т. Е. Она не выполнит половину команд, а затем завершится неудачно для остальных, если одна из них не удалась, все они потерпят неудачу).

Насколько мне известно, SQL Server использует пул соединений, поэтому я бы не стал полагаться на одно соединение для каждого клиента.

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