Pergunta

Como você autocommit conjunto em uma sessão SQL Server?

Foi útil?

Solução

Você pode ativar autocommit ON definindo implicit_transactions OFF:

SET IMPLICIT_TRANSACTIONS OFF

Quando a definição é ON, ele retorna para o modo de transação implícita. No modo de transação implícita, cada mudança que você faz começa uma transação que você tem que comprometer manualmente.

Talvez um exemplo é mais clara. Isto irá gravar uma alteração no banco de dados:

SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
COMMIT TRANSACTION

Isso não vai escrever uma alteração no banco de dados:

SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
ROLLBACK TRANSACTION

O exemplo a seguir irá atualizar uma linha, e depois queixam-se que não há nenhuma transação para cometer:

SET IMPLICIT_TRANSACTIONS OFF
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
ROLLBACK TRANSACTION

Como Mitch Wheat disse, autocommit é o padrão para o SQL Server 2000 e para cima.

Outras dicas

Eu queria uma maneira mais permanente e mais rápido. Porque eu tendem a esquecer de adicionar linhas extras antes de escrever meu Atualização real / consultas de inserção.

Eu fiz isso através da verificação IMPLICIT_TRANSACTIONS SET caixa de seleção de Opções. Para navegar para Opções Escolher Ferramentas> Opções> Execução da Consulta> SQL Server> ANSI no seu Server Management Studio Microsoft SQL.

Apenas certifique-se de executar commit ou rollback Depois de terminar de executar suas consultas. Caso contrário, a tabela que você teria executar a consulta será bloqueado para os outros.

Autocommit é o modo de gerenciamento de transações padrão do SQL Server. (SQL 2000 em diante)

Ref: AutoCommit Transações

Com SQLServer 2005 Express, que eu encontrei foi que, mesmo com autocommit off , inserções em uma tabela Db foram cometidos sem o meu realmente emitir um comando de consolidação da sessão Management Studio. A única diferença foi, quando autocommit estava fora, eu poderia reverter todas as inserções; com * autocommit on , eu não podia. * Na verdade, eu estava errado. Com o modo autocommit fora, eu vejo as alterações só na janela de QA (Query Analyzer) a partir do qual foram emitidos os comandos. Se eu apareci uma janela (Query Analyzer) nova QA, eu não ver as alterações feitas pela primeira janela (sessão), ou seja, eles não estão comprometidos! I teve de emitir consolidação explícita ou comandos de reversão para fazer alterações visíveis para outras sessões (janelas QA) - meu mau! As coisas estão funcionando corretamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top