Você deve ter notado que o T-SQL inclui um
CONVERT() função e um TRY_CONVERT() função que você pode usar no SQL Server para realizar conversões entre tipos de dados. Mas se você está coçando a cabeça sobre qual é a diferença entre essas duas funções, continue lendo! A diferença entre
CONVERT() e TRY_CONVERT() está na maneira como eles lidam com tipos de dados que não podem ser convertidos. Um lança um erro, enquanto o outro retorna null. Os exemplos a seguir demonstram isso. A função CONVERT()
Primeiro, vamos ver o que
CONVERT() função faz. Ele converte um tipo de dados em outro. Aqui está um exemplo:SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Resultado:
Result ----------- Comments: 9
Neste exemplo, convertemos um
int valor para varchar(12) . E como o valor pôde ser convertido em nosso tipo e comprimento de dados desejados, isso funcionou perfeitamente. No entanto, enquanto isso funciona perfeitamente quando a conversão é bem-sucedida, o que acontece quando ela falha?
Quando a conversão falha → Erro
Vamos ajustar o código um pouco e ver o que acontece quando a conversão falha:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Resultado:
Error: Arithmetic overflow error converting numeric to data type varchar.
Recebemos um erro.
A função TRY_CONVERT()
O
TRY_CONVERT() é uma alternativa que podemos usar para evitar a mensagem de erro. Esta função executa a mesma operação de conversão de dados que CONVERT() , no entanto, se esta função não puder realizar a conversão, ela retornará null :SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Resultado:
Result ------ null
Você pode pegar esse resultado e aplicar o código condicional para que uma coisa diferente aconteça dependendo se a conversão for bem-sucedida ou não.
Exemplo:
SELECT
CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL
THEN 'Conversion failed'
ELSE 'Conversion succeeded'
END AS Result; Resultado:
Result ----------------- Conversion failed
Tipos de dados inválidos
Uma ressalva com
TRY_CONVERT() é que ele só funciona dessa maneira ao usar tipos de dados válidos. Portanto, você receberá um erro se fornecer explicitamente um tipo de dados que não é permitido. Exemplo:
SELECT 'Comments: ' + TRY_CONVERT(Homer, 10.00) AS Result;
Resultado:
Error: Type Homer is not a defined system type.