Oi! Seja bem-vindo!

Hoje vamos aprender o comando UPDATE para atualizar tabelas do SQL SERVER. E mais, vou te mostrar como evitar o temido UPDATE SEM WHERE 🙂

 

Como fazer UPDATE em TABELAS

Como de costume, vamos a prática e ver a coisa funcionando! Montei abaixo um script com exemplos das várias formas de fazer UPDATE. Apesar desse comando fácil há que se tomar MUITO CUIDADO ao executar UPDATES e DELETES, pois se você ESQUECER da cláusula WHERE pode acabar com um enorme problemão! Vejamos os exemplos:

P.S: Ah, se você ainda não tem o SQL instalado e está sem tempo de instalar, veja nesse artigo (http://dba-pro.com/como-executar-comandos-sql-na-internet/) como simular na internet os comandos abaixo.

 

-- Tabela para testes
create table colaboradores (
	id smallint,
	nm varchar(100),
	ds_cargo varchar(100),
	ic_casado bit,
	nm_conjuge varchar(100),
	vl_salario smallmoney,
	pc_comissao decimal(6, 2)
	)
insert into colaboradores values
	(1, 'Armeloque Araujo', 'Gerente de Vendas', 0, null, 20000, 0),
	(2, 'Colapso Cardiaco', 'Aspone Senior', 0, null, 15000, 10),
	(3, 'Defuntina da Cruz', 'Assistente de Vendas', 0, null, 7000, 10),
	(4, 'Jean Claude Van Dame Da Silva', 'Assistente de Vendas', 0, null, 8000, 10),
	(5, 'Mitiko Kudo Endo', 'Assistente de Vendas', 0, null, 9000, 10),
	(6, 'Amisvaldo Teixeira', 'Caixa', 0, null, 4000, 0)


-- Atualizar a comissão de TODOS os colaboradores para 10%. Veja que nesse caso NÃO USAMOS WHERE
update colaboradores set pc_comissao = 10
select * from colaboradores

-- Atualizar o conjuge do colaborador "Armeloque" que casou-se recentemente:
-- Nesse caso atualizamos 2 colunas, separando-as por vírgula e usamos a CLÁUSULA WHERE.
-- Se esquecermos a CLÁUSULA WHERE todos os colaboradores aparecerão como casados com a mesma pessoa.
update colaboradores set nm_conjuge = 'Rapariga Siqueira', ic_casado = 1 WHERE ID = 1
select * from colaboradores where id = 1

-- Tarefa exemplo: implementar o plano de cargos e salários da empresa de acordo com o cargo
-- Para fazer isso usamos o comando CASE para definir o valor do salário de acordo com o cargo
update colaboradores set
	vl_salario = 
		case ds_cargo
			when 'Gerente de Vendas' then 25000
			when 'Aspone Senior' then 20000
			when 'Aspone Junior' then 18000
			when 'Assistente de Vendas' then 15000
			else 5000
		end
select * from colaboradores

-- Limpando testes
drop table colaboradores

 

Como EVITAR UPDATE SEM WHERE :$

Todos que já trabalharam tempo suficiente na área de TI já fizeram ou viram outros fazer o temido UPDATE SEM WHERE… A muitos anos eu presenciei um profissional que ganhava 10 vezes mais do que eu na época ter sua carreira terminada na empresa por conta de um UPDATE SEM WHERE. Fiquei tão apavorado na época rsrsrsrsrs que criei uma receitinha de bolo para garantir que eu nunca passasse por isso, e recomendo que você que USE E ABUSE dessa dica sensacional! Como dizem por ai, o único jeito de aprender é errando, mas ninguém disse que o erro precisa ser nosso, certo? kkkkk Segue a receitinha…

-- Tabela para testes
create table colaboradores (
	id smallint,
	nm varchar(100),
	ds_cargo varchar(100),
	ic_casado bit,
	nm_conjuge varchar(100),
	vl_salario smallmoney,
	pc_comissao decimal(6, 2)
	)
insert into colaboradores values
	(1, 'Armeloque Araujo', 'Gerente de Vendas', 0, null, 20000, 0),
	(2, 'Colapso Cardiaco', 'Aspone Senior', 0, null, 15000, 10),
	(3, 'Defuntina da Cruz', 'Assistente de Vendas', 0, null, 7000, 10),
	(4, 'Jean Claude Van Dame Da Silva', 'Assistente de Vendas', 0, null, 8000, 10),
	(5, 'Mitiko Kudo Endo', 'Assistente de Vendas', 0, null, 9000, 10),
	(6, 'Amisvaldo Teixeira', 'Caixa', 0, null, 4000, 0)



-- EVITANDO UPDATE SEM WHERE...
-- Tarefa: Aumentar o salário dos assistentes em 10% e mudar a comissão para 20%.
-- Passo 1) Montar select simples filtrando os dados alvo
select * from colaboradores where ds_cargo = 'Assistente de Vendas'

-- Passo 2) Simular a atualização usando alias
select 
	nome = nm,
	pc_comissao_antigo = pc_comissao,
	vl_salario_antigo = vl_salario,
	pc_comissao = 20.00,
	vl_salario = vl_salario * 1.10
from colaboradores where ds_cargo = 'Assistente de Vendas'

-- Passo 3)
-- Trocar "select" por "update nome_tabela_ou_alias set":
-- Retirar "from nome_tabela" (se não houver "joins")
-- Retirar campos / alias de teste que não serão atualizados
update colaboradores set
	pc_comissao = 20.00,
	vl_salario = vl_salario * 1.10
where ds_cargo = 'Assistente de Vendas'

select * from colaboradores

-- Passo 4) Ficar feliz porque você não vai mais correr risco de fazer UPDATE SEM WHERE... rsrsrsrs


-- Limpando testes
drop table colaboradores

CONCLUSÃO

UPDATE é fácil, o difícil é sair invicto ao longo dos anos e não fazer um deles SEM WHERE… Com essa receitinha simples de 3 passos te garanto que você não corre mais esse risco! As vezes meus alunos falam que ficam confiantes e param de usar a receita porque ela acaba dando mais trabalho. Realmente com a receita dá mais trabalho, só que como dizia meu avô, o seguro morreu de velho. Eu prefiro gastar 1 minuto a mais (como seguro) e evitar a calamidade de um UPDATE sem WHERE… E você, o que acha? Já tem algum “causo” para contar sobre UPDATE sem WHERE?

Abraço do seu amigo Josué 🙂

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *