Мой вопрос прост: каковы различия / сходства / мощности между
в 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, которые работают (для всех остальных пользователей этой базы данных) как один оператор.