Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

inserir e atualizar dados conjuntamente

Sei que no MySQL existe um comando que insere registros na tabela e, quando aquele registro já existe, ele atualiza com os novos dados fornecidos. Salvo engano o comando é:

INSERT INTO.... VALUES ... ON DUPLICATE KEY UPDATE ....

Alguém sabe dizer se no SQL server tem algum comando que executa essa mesma função?

obrigado!

5 respostas

Oii Ley, tudo bem?

Geralmente o pessoal utiliza uma transação para fazer isso, usando o IF NOT EXISTS, porém é uma solução muito complexa.

A partir do SQL Server 2008, podemos utilizar o comando MERGE, que é o equivalente ao ON DUPLICATE KEY UPDATE.

Vou deixar aqui para você um tutorial explicando passo a passo de como funciona o Merge: Utilizando o comando MERGE para INSERT + UPDATE + DELETE.

Espero que isso te ajude. Qualquer coisa estou por aqui, tá bom? :)

Na verdade eu queria atualizar na mesma tabela, e não fazer essa transição de uma tabela para outra.

De qualquer forma, obrigado por ter mencionado o comando MERGE. Não o conhecia. Vou da uma pesquisada depois

Olá, Maria.

Sabe dizer em qual aula é ensinado o uso dos IFs ?

solução!

Oii Ley,

Estive pesquisando mais para ver se eu encontrava outra solução para isso sem ser o Merge e a solução equivalente é comandos com IFs.

Encontrei dois artigos interessantes que podem te ajudar mais com o Merge para um Upsert (que acredito que é isso que queira) e também com os IFs.

Nas aulas o professor não fala muito sobre os IFs, desculpe por isso. Nos cursos posteriores, são um pouco mais avançados falando de triggers e funções do SQL Server. Inclusive tem uma aula em que ele fala sobre o MERGE para atualização de dados: Usando MERGE para alterar dados

Espero ter ajudado de alguma forma. Qualquer coisa estou à disposição, tá bom? :)

Esses artigos são muito avançados pra mim. Comecei a aprender sobre sql faz poucos dias. hahahaha

Mas o importante é que consegui adaptar uma instrução IF pro meu caso e, aparentemente, o programa está funcionando normal.

Obrigado!