2
respostas

Alterando o volume de compra dos clientes #2

Fiz assim, o que vocês acharam?

UPDATE A SET A.[VOLUME DE COMPRA] = (A.[VOLUME DE COMPRA] * 1.30)
FROM (SELECT A.CPF, A.[VOLUME DE COMPRA] FROM [dbo].[CLIENTES] A
INNER JOIN [dbo].[VENDEDORES] B
ON A.[BAIRRO] = B.[BAIRRO]) A;
2 respostas

Olá Michael!

Apesar de ser uma forma válida de escrever o comando (testei e vi que funciona), é importante ressaltar que no padrão ANSI não existe esta forma de utilização das tabelas de origem de informação registradas na literatura das versões de SQL Server - inclusive do SQL Server 2019. Admito que, pra mim, foi interessante, pois nunca havia visto ou tentado escrever desta forma (então aprendi um truque novo...rs.

Entretanto, me recordo que ele pode vir a falhar em versões antigas do SQL Server (7.0 / 2000 / 2005), porque essas versões tinham restrições de uso de subquerie na posição do FROM, o que deve ter sido modificado pela Microsoft , mas ainda não foi incentivado, nem documentado/apresentado (vide link do Books Online: https://docs.microsoft.com/pt-br/sql/t-sql/queries/update-transact-sql?f1url=%3FappId%3DDev15IDEF1%26l%3DPT-BR%26k%3Dk(UPDATE_TSQL);k(sql13.swb.tsqlresults.f1);k(sql13.swb.tsqlquery.f1);k(MiscellaneousFilesProject);k(DevLang-TSQL)%26rd%3Dtrue&view=sql-server-ver15)

E, falando de times de desenvolvimento, também pode trazer dúvidas a outro profissional que, durante uma manutenção, pode não interpretar seu script corretamente. Fiz um teste de manutenção no seu script, e em uma adição de coluna para atualização, seu script exige alteração em 2 lugares(SET + Subquerie), enquanto o script padrão ANSI bastará apenas adicionar no SET o campo existente e válido a ser atualizado.

UPDATE A 
   SET A.[VOLUME DE COMPRA] = (A.[VOLUME DE COMPRA] * 1.30)
  FROM [dbo].[CLIENTES] A
 INNER JOIN [dbo].[VENDEDORES] B
    ON A.[BAIRRO] = B.[BAIRRO] ;

Mas é importante e válido conhecer todas as formas possiveis de se atigir o objetivo. Vantagens e desvantagens à parte, parabéns pelo script!

Olá Adilson!

Muito obrigado Adilson, pelo comentario.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software