Como ver o conteúdo de um campo MEMO via SQL Server

Olá pessoal…

Hoje vou mostrar um exemplo simples de como pegar o conteúdo de um campo MEMO do SQL Server via AdvPL (tanto o campo IMAGE, quanto pegando via SYP).

Existe dois tipos de campo MEMO no Protheus, um que usa o tipo IMAGE, e deixa o conteúdo criptografado, e um que grava tudo na tabela SYP, quebrando linha pela expressão “\13\10”. Abaixo mostro um exemplo de cada.

Pelo campo tipo IMAGE

Pelo campo Image, basta converter como VARBINARY para VARCHAR, com o tamanho máximo de 8000 bytes. No exemplo abaixo, eu pego o campo B1_COD, o B1_DESC e converto o B1_X_OBS usando esse comando.

SELECT
	B1_COD,
	B1_DESC,
	ISNULL(CAST(CAST(B1_X_OBS AS VARBINARY(8000)) AS VARCHAR(8000)),'') AS OBS
FROM
	SB1010 SB1

Dessa forma, ele pega o conteúdo do B1_X_OBS, e converte para ser visível e possível a manipulação.

Pela tabela SYP

A tabela SYP, era a forma antiga do Protheus controlar os campos MEMO, e nesse tipo, ele gerava vários registros com textos, por exemplo, a cada x caracteres gera uma nova linha, e para buscar isso via SQL Server, podemos fazer uma subquery, buscando pela chave da tabela, e montando a expressão em uma única linha com FOR XML PATH.

SELECT 
	UC_DTENCER AS DT_ENCER, 
	UC_DATA AS DT_2, 
	ISNULL(
		CONVERT(VARCHAR(400), (
			SELECT
				RTRIM(SYP.YP_TEXTO)
			FROM
				SYP010 SYP
			WHERE
				SYP.YP_CHAVE = SUC.UC_CODOBS
				AND SYP.YP_CAMPO = 'UC_CODOBS'
				AND SYP.D_E_L_E_T_ = ' '
			ORDER BY
				YP_SEQ
			FOR XML PATH ('')
		)), 
	'') AS ATIVIDADE
FROM 
	SUC010 SUC 

No exemplo acima, delimitamos que queremos até 400 caracteres, e fazemos uma subquery buscando os dados da SYP.

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

Dan_Atilio
Analista e desenvolvedor de sistemas. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas.

Deixe uma resposta