SQL Server 2012 – Cláusula CONCAT() e o que isso significa pra galáxia


golphin

Bom dia. Post rápido, de nível básico pra não deixar água parada 🙂

Vários Sistemas Gerenciadores de Bancos de Dados (ou DBMS, no original) utilizam, pra concatenar, ou seja, juntar textos, pipes (o símbolo  –> | <–)  sendo que o padrão ANSI-92 prevê dois pipes como concatenação (mas não é obrigado a ser seguido tanto que o SQL Server não o faz) ou a função CONCAT(), que é bastante popular no Oracle e no MySQL. SQL Server, por sua vez, sempre concatenou os textos com o símbolo + (plus, conhecimento popularmente como MAIS).

Felizmente, assim como de costume em cada release, novos comandos (ou velhos, dependendo do ponto de vista) são adicionados no SQL Server de modo a facilitar a portabilidade entre sistemas. Aliás, features assim eu já vejo de cara como tentativa da MS de justificar migrações de código, deixando-as menos penosas. Mas bem, adivinha quem entrou como alternativa pra concatenações no SQL Server?

THIS GUY  ————> link

<pre>--> Declaração pra testes :)

DECLARE @boss VARCHAR(100) = 'Chuck Norris'
DECLARE @lutaPerdida VARCHAR(3) = 'uma'
DECLARE @Oponente VARCHAR(20) = 'Bruce Lee'

--> Exemplo de Concatenação convencional

SELECT 'Até hoje '+@boss+' só perdeu '+@lutaPerdida+' luta, que foi para o adversário '+@Oponente+'. Não precisa nem falar o que aconteceu depois' AS UsandoConcatString

--> Exemplo de Concatenação usando a cláusula CONCAT

SELECT CONCAT('Até hoje ',@boss,' só perdeu ',@lutaPerdida,' luta, que foi para o adversário ',@Oponente,'. Não precisa nem falar o que aconteceu depois') AS UsandoFuncaoConcat</pre>

Mas essa ainda não é a maior vantagem do CONCAT sobre o método tradicional. Observe que todos os envolvidos na concatenação eram tipos textuais. Mas e nos casos comuns, onde geralmente temos que concatenar texto com números?


DECLARE @nome VARCHAR(20) = 'SQL SERVER'
DECLARE @release INT = 2012

--> Tudo o que estiver dentro de CONCAT() sai como String.

SELECT CONCAT(@NOME,' ',@RELEASE)

--> Com a concatenação convencional do SQL Server...

SELECT @NOME+' '+@RELEASE

Msg 245, Level 16, State 1, Line 11
Conversion failed when converting the varchar value ‘SQL SERVER ‘ to data type int.

A mensagem é clara demais…Ele tenta concatenar um número com texto e falha. Pra que o código acima rodasse tranquilamente, era necessário um CAST ou CONVERT na variável @release para um tipo textual, sendo possível assim realizar a concatenação. Exemplo:


DECLARE @nome VARCHAR(20) = 'SQL SERVER'
DECLARE @release INT = 2012

--> Agora o código executa com sucesso
SELECT @nome+' '+CAST(@release AS CHAR(4))

Significa que quando recebermos a tarefa de migrar um script do MySQL ou Oracle pra SQL Server por exemplo, teremos menos uma dor de cabeça em relação a cláusula de concatenação, já que a função agora é a mesma. Parece uma mudança irrelevante e sem graça, e de fato, perto do que o 2012 traz, não é aquela senhora feature, mas achei um passo até notável. Alguns pontos:

1) Evite sempre que possível o uso de extensões proprietárias. Prefira sempre comandos ANSI e se não houver, algo de sintaxe similar ou que seja comum a outros bancos. Isso facilita o reuso, migrações de código entre plataformas. SEMPRE pense nisso quando for desenvolver algo em SQL.

2) Concatenação geralmente é um recurso bastante presente em códigos legados. Não precisar portar boa (senão toda) parte dele é economia de tempo. Isso tem impacto sobre sua vida, sua produtividade e na vida dos ursos no polo norte.

3) SQL Server cada vez mais se torna amigável adaptando em si alguns recursos que são usados de modo frequente. Vejo isso como uma oportunidade  de desmistificar pra profissionais que mexem com outros sistemas que MSSQL é algo de outro mundo (sendo que nem é e possui inclusive um dos dialetos (T-SQL) mais fáceis entre os disponíveis). O uso destes recursos pelo desenvolvedor possibilita a propagação dessa idéia. ;

4) Desenvolvedores (T)-SQL fazem com que o código mais universal  reduzam o impacto de meteoritos para longe da órbita do planeta Migrations;

Enfim, recomendo que você use CONCAT() sempre que possível partindo da versão SQL Server 2012 se não houver envolvimento com o legado, é claro.

[]’s


Leave a Reply

Your email address will not be published. Required fields are marked *