none
erro em procedure RRS feed

  • Pergunta

  • Estou utilizando o sql 2008 R2, por enqyanto

    Eu tenho uma Procedure que faz o instert em uma tabela que criei, ela sempre funcionou atá a versão fo sistema TOTVS RM 12.1.19 , atualizei para a versão 12.1.24 e ela não esta mais funcionando, quando tento executar ela, apresenta a seguinte mensagem: 

    "Msg 8152, Level 16, State 14, Line 1
    String or binary data would be truncated.
    The statement has been terminated."

    A Funsão da procedure é criar um sequencial para que possa ser gerado etiquetas sequenciais para uns produtos que são vendidos em KG.

    Veja a procedure a baixo.

    CREATE PROCEDURE [dbo].[GERAETIQUETA] 
    @NOTAFISCAL VARCHAR(35) 

    AS

    WITH
      PASS0 AS ( SELECT 1 AS C UNION ALL SELECT 1 ) , 
      PASS1 AS ( SELECT 1 AS C FROM PASS0 AS A , PASS0 AS B ) , 
      PASS2 AS ( SELECT 1 AS C FROM PASS1 AS A , PASS1 AS B ) , 
      PASS3 AS ( SELECT 1 AS C FROM PASS2 AS A , PASS2 AS B ) , 
      PASS4 AS ( SELECT 1 AS C FROM PASS3 AS A , PASS3 AS B ) , 
      TALLY AS ( SELECT ROW_NUMBER() OVER (ORDER BY C ) AS SEQUENCIAL FROM PASS4 ) 

    INSERT INTO ZNOVAETIQUETA 

    SELECT
    ROW_NUMBER () OVER (ORDER BY I.IDMOV) AS IDSEQ , 
    M.IDMOV , 
    P.IDPRD , 
    M.CODCOLIGADA , 
    P.NOMEFANTASIA , 
    LP.NUMLOTEFABRICANTE , 
    LP.DATAFABRICACAO , 
    LP.DATAVALIDADE , 
    (I.QUANTIDADETOTAL / ISNULL(I.VALOROPFRM1,1)) AS PESOLIQUIDOI , 
            (ISNULL(SUBSTRING (T4.CODTB4FAT,5,7),0) + ISNULL ( T4.COMISSAO,0 ) ) AS PESOBRUTOI , 
    F.NOME , 
    M.NUMEROMOV , 
    CONVERT(VARCHAR, ROW_NUMBER () OVER (ORDER BY I.IDMOV)) + ' / ' + convert(VARCHAR, ISNULL(M.QUANTIDADE,1) ) AS SEQ ,
    P.DESCRICAO , 
    M.QUANTIDADE , 
    I.QUANTIDADETOTAL , 
            ISNULL(SUBSTRING (T4.CODTB4FAT,5,7),0) as EMBAL , 
    M.PESOBRUTO AS PESOBRUTOM , 
    M.PESOLIQUIDO AS PESOLIQUIDOM , 
    M.CODTMV , 
    ISNULL(I.VALOROPFRM1,1) AS VOLUMES

    FROM TMOV M (NOLOCK)  
    INNER JOIN TITMMOV I (NOLOCK) ON I.CODCOLIGADA = M.CODCOLIGADA AND I.IDMOV = M.IDMOV 
    INNER JOIN TPRD P (NOLOCK) ON P.CODCOLIGADA = I.CODCOLIGADA AND P.IDPRD = I.IDPRD 
    INNER JOIN TITMLOTEPRD L (NOLOCK) ON L.CODCOLIGADA = I.CODCOLIGADA AND L.IDMOV = I.IDMOV AND L.NSEQITMMOV = I.NSEQITMMOV 
    INNER JOIN TLOTEPRD LP (NOLOCK) ON LP.CODCOLIGADA = P.CODCOLIGADA AND LP.IDPRD = P.IDPRD AND LP.IDLOTE = L.IDLOTE 
    INNER JOIN FCFO F (NOLOCK) ON F.CODCOLIGADA = M.CODCOLCFO AND F.CODCFO = M.CODCFO 
    INNER JOIN TTB4 T4 (NOLOCK) ON T4.CODCOLIGADA = I.CODCOLIGADA AND T4.CODTB4FAT = I.CODTB4FAT 
    INNER JOIN TALLY T (NOLOCK) ON T.SEQUENCIAL <= I.VALOROPFRM1  

    WHERE M.CODTMV like '2.2.%' 
    AND M.DATAEMISSAO >= (GETDATE () - 190) 
    and M.NUMEROMOV = @NOTAFISCAL 
    AND M.IDMOV NOT IN (SELECT IDMOV FROM ZNOVAETIQUETA ) 

    ORDER BY M.IDMOV , I.NUMEROSEQUENCIAL 

    GO

    Obs.: Já tentei gerar os dados por meio da sentenla SQL da Proc e realizar o insert, porém apresenta o mesmo erro.

    Será que se eu recriar a tabela a proc volta a funcionar?

    Desde já muito obrigado

    quinta-feira, 11 de julho de 2019 02:30

Respostas

Todas as Respostas

  • Abaixo segue as definições da tabela.

    UPDATE [CorporeRM].[dbo].[ZNOVAETIQUETA]
       SET [IDSEQ] = <IDSEQ, int,>
          ,[IDMOV] = <IDMOV, int,>
          ,[IDPRD] = <IDPRD, int,>
          ,[CODCOLIGADA] = <CODCOLIGADA, int,>
          ,[NOMEFANTASIA] = <NOMEFANTASIA, varchar(100),>
          ,[NUMLOTEFABRICANTE] = <NUMLOTEFABRICANTE, varchar(100),>
          ,[DATAFABRICACAO] = <DATAFABRICACAO, datetime,>
          ,[DATAVALIDADE] = <DATAVALIDADE, datetime,>
          ,[PESOLIQUIDOI] = <PESOLIQUIDOI, numeric(15,4),>
          ,[PESOBRUTOI] = <PESOBRUTOI, numeric(15,4),>
          ,[NOME] = <NOME, varchar(60),>
          ,[NUMEROMOV] = <NUMEROMOV, varchar(35),>
          ,[SEQ] = <SEQ, varchar(9),>
          ,[DESCRICAO] = <DESCRICAO, varchar(100),>
          ,[QUANTIDADE] = <QUANTIDADE, int,>
          ,[QUANTIDADETOTAL] = <QUANTIDADETOTAL, numeric(15,4),>
          ,[EMBAL] = <EMBAL, varchar(10),>
          ,[PESOBRUTOM] = <PESOBRUTOM, numeric(15,4),>
          ,[PESOLIQUIDOM] = <PESOLIQUIDOM, numeric(15,4),>
          ,[CODTMV] = <CODTMV, varchar(10),>
          ,[VOLUMES] = <VOLUMES, numeric(15,4),>
     WHERE <Search Conditions,,>
    GO
    quinta-feira, 11 de julho de 2019 02:37
  • Deleted
    quinta-feira, 11 de julho de 2019 09:13
  • Agradeço a ajuda

    Eu verifiquei se o tamanho dos dados que estão sendo gerados por meio do SCRIPT são maiores que os campos da tabela ZNOVAETIQUETA e pelo que identifiquei são todos menores.

    A tabela também não tem limitação de tamanho pra inserir dados, de qualquer forma eu recriei a tabela com outro nome e totalmente vazia e tentei fazer o Insert, apresentou a mesma mensagem de erro.

    Estou tentando revalidar os dados.

    quinta-feira, 11 de julho de 2019 10:04
  • Deleted
    quinta-feira, 11 de julho de 2019 10:29
  • Bom dia

    Aparentemente eu descobri onde esta o problema, no campo criado SEQ que é utilizado para criar o sequencial de 1 até N, ao fazer o insert neste campo o SCRIP esta gerando a informação errada.

    O correto deve ser assim: 1/2.0000

    Ele esta gerando assim:    1 / 2.000

    Por algum motivo ele esta acrescentando espaço e com isso gerando o erro, vou tratar este erro e ver se o problema é resolvido de vez.

    Obs. Para eu descobrir o erro eu realizei o Insert com apenas os campos ID informados e os outros todos NULL, e fui realizando UPDATE campo a campo, até ele apresentar o erro, com isso consegui achar o possivel problema.

    Estarei atuando na correção deste erro e quem sabe acaba os meus problemas.

    Por hora, agradeço muito a ajuda.

    quinta-feira, 11 de julho de 2019 10:57
  • Deleted
    quinta-feira, 11 de julho de 2019 20:54