No artigo de hoje, vamos mostrar uma query SQL que busca a descrição de uma opção de um campo ComboBox.
Recentemente meu amigo Israel ( LinkedIn ), criou uma query que traz a descrição de uma opção de um campo ComboBox.
Quem já precisou trazer a descrição de uma opção do combobox direto numa query, essa função criada em SQL Server, é uma mão na roda para agilizar.
Segue o código fonte da função em SQL Server:
/*============================================================
FUNÇÃO........: FN_GETSX3CBOX_DESC
VERSÃO........: 1.0
AUTOR.........: Israel Elias
DATA..........: 10/06/2026
BANCO DE DADOS: Microsoft SQL Server
AMBIENTE......: TOTVS Protheus
DESCRIÇÃO
Retorna a descrição correspondente a um código armazenado
no campo X3_CBOX da tabela SX3010.
Campos do Protheus que usam X3_CBOX armazenam opções no
formato Código=Descrição separadas por ";". Como as tabelas
gravam apenas o código, esta função faz a conversão
automaticamente.
Exemplo:
Campo : C5_TPFRETE
Valor : F
Retorno: FOB
Se o código não existir, retorna string vazia.
============================================================*/
CREATE FUNCTION dbo.FN_GETSX3CBOX_DESC
(
@CAMPO VARCHAR(50), /* Campo na SX3 (ex: 'B1_TIPO') */
@VALOR VARCHAR(50) /* Chave no CBOX (ex: 'PA') */
)
RETURNS VARCHAR(100)
AS
BEGIN
/* Rejeita entradas nulas */
IF @CAMPO IS NULL OR @VALOR IS NULL
RETURN ''
/* Busca a lista de opções do campo (ex: 'CH=Chapa;PA=Parafuso') */
DECLARE @CBOX VARCHAR(1000)
SELECT @CBOX = LTRIM(RTRIM(X3_CBOX))
FROM SX3010
WHERE X3_CAMPO = @CAMPO
IF @CBOX IS NULL OR @CBOX = ''
RETURN ''
/* CBOX dinâmico (ex: '#U_FUNCTION'): não resolvível via SQL */
IF @CBOX LIKE '#%'
RETURN ''
/* Remove ';' final para evitar token vazio no STRING_SPLIT */
IF RIGHT(@CBOX, 1) = ';'
SET @CBOX = LEFT(@CBOX, LEN(@CBOX) - 1)
/* Divide por ';', extrai a descrição onde a chave = @VALOR */
DECLARE @DESC VARCHAR(100)
SELECT @DESC = LTRIM(RTRIM(SUBSTRING(value, CHARINDEX('=', value) + 1, LEN(value))))
FROM STRING_SPLIT(@CBOX, ';')
WHERE CHARINDEX('=', value) > 0
AND UPPER(LTRIM(RTRIM(LEFT(value, CHARINDEX('=', value) - 1))))
= UPPER(LTRIM(RTRIM(@VALOR)))
/* Retorna vazio se @VALOR não encontrado */
RETURN ISNULL(@DESC, '')
END
E abaixo um print do resultado, buscando a descrição do campo A1_TIPO.

Bom pessoal, por hoje é só.
Abraços e até a próxima.