Eu queria saber se você encontrou um comando T-SQL semelhante ao conceito de UPSERT? A execução de operações INSERT | UPDATE usando as opções (1) ou (2) parece excessivamente complexa e propensa a erros.
OBJETIVO
Para garantir que o registro desejado (neste caso employee_id 1) esteja atualizado, SEM ter que escrever essencialmente a mesma consulta duas vezes.
CONTEXTO
- nome da tabela: employee
- ID do funcionário: possui uma chave primária e o estabelecimento da identidade é definido como verdadeiro
OPÇÕES
execute uma atualização SQL ... verifique @@ rowcount = 0 e @@ error = 0 ... execute SQL INSERT, se necessário
- con: você precisa efetivamente escrever a mesma consulta duas vezes, uma vez como uma inserção, uma vez como uma atualização
- con: more code = mais tempo digitando
- con: mais código = mais espaço para erro
/programming/1106717/how-to-implement-a-conditional-upsert-stored-procedure "Atualizar usando @@ rowcount"
- executar um SQL MERGE
- con: você precisa efetivamente escrever a mesma consulta duas vezes, uma vez como uma inserção, uma vez como uma atualização
- con: more code = mais tempo digitando
- con: mais código = mais espaço para erro
http://technet.microsoft.com/en-us/library/bb510625.aspx "Mesclagem de T-SQL"
- executar um SQL UPSERT (o recurso não existe)
- pro: você define o relacionamento de dados para tabela uma vez (deixe o SQL Server se preocupar se é ou não um INSERT ou UPDATE)
- pro: menos código = implementação mais rápida
- pro: menos código = menor probabilidade
EXEMPLO UPSERT
UPSERT employeee (employee_id, employee_number, job_title, first_name, middle_name, sobrenome, modified_at) VALUES (1, '00 -124AB37 ',' Manager ',' John ',' T ',' Smith ', GetDate ());
- se employee_id 1 não existir: MS SQL executa uma instrução INSERT
- se employee_id 1 existir: o MS SQL executa e a instrução UPDATE
MERGE
é direto, flexível e também faz parte do SQL Standard. O verdadeiro problema com MERGE
e outras UPSERT
implementações é a potencial escalada de bloqueios ou até deadlocks, que nada tem a ver com sintaxe.
MERGE
implementação no SQL Server.