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, sendo necessário converter para VARCHAR, 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 ou RDY (formas antigas)

A tabela SYP (ou RDY), era a forma antiga do Protheus controlar os campos MEMO (através da função MSMM), 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 (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

Deixe uma resposta