Pergunta

Eu tenho uma tabela que tem um disparador de inserção nele. Se eu inserir em 6000 registros para essa tabela em uma instrução de inserção de um procedimento armazenado, será o retorno procedimento armazenado antes da conclusão do inserção de gatilho?

Só para ter certeza que eu estou pensando corretamente, o gatilho só deve ser chamado (eu sei 'chamado' não é a palavra certa) uma vez porque havia apenas 1 instrução de inserção, certo?

A minha pergunta principal é: será o acabamento sproc mesmo se o gatilho não completou

Foi útil?

Solução

O seu disparador de inserção será executada uma vez para toda a instrução de inserção. É por isso que é importante usar tabela temporária do inserted para ver o que realmente foi inserido, e não apenas selecionar o registro mais recente single, ou algo parecido.

Eu só testou um disparador de inserção e atualização e, na verdade, eles são considerados parte da inserção de sql server. o processo não vai terminar até que os acabamentos de gatilho.

Outras dicas

Os gatilhos fazem parte da transação que os chamou.

Uma coisa importante sobre gatilhos que você deve estar ciente de que o gatilho dispara uma vez para cada transação (pelo menos no servidor SQL, você deve verificar outros dbs, mas mesmo se ele irá processar linha por linha, que é geralmente um má idéia), por isso, se você inserir 6000 registros o gatilho dispara uma vez, não 6000 vezes. Muitas pessoas não estão conscientes disso e gatilhos de gravação como se irá processar várias inserções gravar um registro de cada vez. Isso não é verdade e seu gatilho deve responder por entregar a inserção de registro múltipla.

A chamada gatilho não é assíncrona. Cada chamada para o procedimento de inserção irá resultar no gatilho ser acionado, eo procedimento não retornará até os acabamentos de gatilho.

Dê uma olhada no plano de consulta para ver como ele funciona. Você verá que as declarações no gatilho será chamada para cada chamada para o procedimento.

A coisa é, cada vez que os critérios de disparo é satisfeita, os incêndios gatilho. Ela dispara uma vez em processamento em lote ou transação. Ver o meu lição 101 sobre TRIGGER

Você deve usar cursor na instrução de inserção para a linha de gatilho processo. Porque Triggers no fogo SQL Server uma vez por afirmação, não uma vez por linha.

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