Minha pergunta é simples: quais são as diferenças / semelhanças / cardinalidades entre
- Transações
- Lotes
- Conexões e
- Afirmações
no SQL Server?
Pelo que entendi, uma conexão é um único canal de comunicação entre uma instância do SQL Server e um cliente no qual são executadas coleções de instruções agrupadas em lotes. Um lote é mapeado de forma implícita ou explícita para uma ou várias transações. Isso está correto?
Transações e lotes são dois conceitos independentes. Ambos podem ser usados em uma configuração de um para muitos.
Os blocos de transação são uma única "unidade de trabalho", um conceito que o sql comprometido deve funcionar totalmente ou não funcionar. Por exemplo, se você atualizar duas tabelas vinculadas uma à outra; ambos devem ter êxito para que a alteração de dados seja confirmada. [ https://msdn.microsoft.com/en-us/library/ms174377.aspx]
Lote é um conceito da Microsoft. Com as ferramentas criadas pela Microsoft, como sqlcmd e osql, o lote simplesmente garante um único plano de execução. Por exemplo, se você criar uma variável e usá-la fora do lote, a ferramenta gerará um erro. [ https://msdn.microsoft.com/en-us/library/ms188037.aspx]
Portanto, você pode ter vários lotes que atualizam várias tabelas dentro de um bloco de transação. Na medida em que eles não violem planos de execução de lote individuais, isso é.
Além disso, dentro de um lote, você pode ter vários blocos de transações, garantindo a integridade dos dados entre entidades do banco de dados, como tabelas.
Conexão é simplesmente o handshake de comunicação que aprova a execução de consultas no servidor.
Instruções são linhas individuais que formam uma consulta. GO (separador de lote T-Sql) e BEGIN TRANSACTION (ANSI SQL para iniciar um novo bloco de transações) são ambas instruções.
fonte
Lotes e transações existem no mesmo nível. Um lote é uma coleção de comandos SQL não relacionados. Uma transação é uma coleção de comandos SQL que operam (no que diz respeito a todos os outros usuários desse banco de dados) como uma instrução.
fonte