none
Procedure com as ações de ler e incluir RRS feed

  • Pergunta

  •  Colegas boa tarde, estou com um problema  em uma Procedure com as ações de ler e incluir.

     Já tentei de varias formas mas não consigo o resultado.

    segue o código, em seguida  a mensagem de erro.

    desde já agradeço.

    USE [bd_PGestaoMateriais]
    GO

    /****** Object:  StoredProcedure [dbo].[_up_TabelaRel592A]    Script Date: 09/01/2012 12:58:29 ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO


    ALTER   procedure [dbo].[_up_TabelaRel592A]
     (
              @Projeto                char(3),
              @Rir                    Int,
              @NF                   char(12),
              @Material             char(75),
              @TotalRegistros       int
    )
    as
    begin

    set nocount on

    DECLARE @SQL        AS VARCHAR(4000)
    Declare @Contador   int
    Set     @Contador = 1

    --if exists (select * from dbo.sysobjects where id = object_id(N'[_Rel592A]')  and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    --   Drop table [_Rel592A]
       
    While @Contador < @TotalRegistros
           Begin
                 PRINT @Contador  + '  ' +  @TotalRegistros
                PRINT   @TotalRegistros
                SET  @SQL = 'INSERT INTO dbo._Rel592A Values(''''Isnull(Material.cdCategoria,'''')
                                                        , Material.cdMaterial
                                                        , Material.cdSubgrupo
                                                        , Material.cdGrupo
                                                        , Material.dsReduzida
                                                        , _CodigosMateriais.CM_TX_CODIGO
                                                        , _CodigosMateriais.CM_TX_EMPRESA
                                                        , Isnull(_Projetos.PR_TX_CODIGO,'''')
                                                        , Isnull(_Projetos.PR_TX_DESCRICAO,'''')
                                                        , Isnull(_NotasFiscaisCarga.NF_TX_AF,'''')
                                                        , Isnull(_NotasFiscaisCarga.NF_TX_NUMERO,'''')
                                                        , _RIR.RI_NR_CODIGO
                                                        , _AF.AF_NR_CODESTRUTURADO
                                                        , _NotasFiscaisCarga.MT_NR_QUANTIDADE
                                                        , Isnull(_CotacaoRMItens.CI_TX_COMPL,''''))'

    SET @SQL = @SQL +  'SELECT Distinct  '
    SET @SQL = @SQL + 'Material.cdCategoria, Material.cdMaterial '
    SET @SQL = @SQL + ', Material.cdSubgrupo '
    SET @SQL = @SQL + ', Material.cdGrupo, Material.dsReduzida, _CodigosMateriais.CM_TX_CODIGO '
    SET @SQL = @SQL + ' ,_CodigosMateriais.CM_TX_EMPRESA, _Projetos.PR_TX_CODIGO  '
    SET @SQL = @SQL + ' ,_Projetos.PR_TX_DESCRICAO, _NotasFiscaisCarga.NF_TX_AF  '
    SET @SQL = @SQL + '    ,_NotasFiscaisCarga.NF_TX_NUMERO, _RIR.RI_NR_CODIGO, _AF.AF_NR_CODESTRUTURADO '
    SET @SQL = @SQL + '    ,_NotasFiscaisCarga.MT_NR_QUANTIDADE,_CotacaoRMItens.CI_TX_COMPL '
    SET @SQL = @SQL + ' FROM  Material  '
    SET @SQL = @SQL + ' INNER JOIN     _CodigosMateriais ON Material.cdGrupo = _CodigosMateriais.CM_TX_GRUPO  '
    SET @SQL = @SQL + ' AND Material.cdSubgrupo = _CodigosMateriais.CM_TX_SUBGRUPO '
    SET @SQL = @SQL + ' AND Material.cdCategoria = _CodigosMateriais.CM_TX_CATEGORIA AND Material.cdMaterial = _CodigosMateriais.CM_TX_MATERIAL  '
    SET @SQL = @SQL + ' Inner JOIN   _NotasFiscaisCarga     ON  Material.cdGrupo + Material.cdSubgrupo + Material.cdCategoria + '
    SET @SQL = @SQL + '  Material.cdMaterial = _NotasFiscaisCarga.MT_TX_CODIGO '
    SET @SQL = @SQL + '  Left OUTER JOIN _Projetos  ON  _Projetos.PR_TX_CODIGO = _NotasFiscaisCarga.PR_TX_CODIGO  '
    SET @SQL = @SQL + '  INNER JOIN           _RIR ON _Projetos.PR_TX_CODIGO = _RIR.PR_TX_CODIGO '
    SET @SQL = @SQL + '  INNER JOIN        _AF ON  _Projetos.PR_TX_CC  =  _AF.AF_TX_CC '
    SET @SQL = @SQL + '  LEFT OUTER JOIN   _CotacaoPedidoFornec   ON _AF.AF_TX_EMPRESA = _CotacaoPedidoFornec.PF_TX_EMPRESA  '
    SET @SQL = @SQL + '  AND   _AF.AF_TX_FILIAL = _CotacaoPedidoFornec.PF_TX_FILIAL  '
    SET @SQL = @SQL + '  AND    _AF.AF_TX_OBRA = _CotacaoPedidoFornec.PF_TX_OBRA  '
    SET @SQL = @SQL + '  Left OUTER JOIN  _CotacaoRMItens ON _CotacaoPedidoFornec.PF_NR_PEDIDO = _CotacaoRMItens.CI_NR_CODIGO  '
    SET @SQL = @SQL + '  AND                 _CotacaoPedidoFornec.PF_NR_PROJETO = _CotacaoRMItens.CI_NR_PROJETO  '
    SET @SQL = @SQL + '  AND               _CotacaoPedidoFornec.PF_NR_RM      = _CotacaoRMItens.CI_NR_RM  '
    if (@Projeto IS NOT NULL)   SET @SQL = @SQL + ' Where (NOT (Material.cdGrupo IS NULL)) and  (_RIR.PR_TX_CODIGO   = ''' + @Projeto + ''' )'
    if (@Rir IS NOT NULL)       SET @SQL = @SQL + ' AND (_RIR.RI_NR_CODIGO = ' +  @Rir + ')'
    if (@NF IS NOT NULL)        SET @SQL = @SQL + ' AND (_RIR.RI_TX_NOTAFISCAL     = ''' +  @NF + ''')'
    if (@Material IS NOT NULL)  SET @SQL = @SQL + ' AND ( Material.cdGrupo + Material.cdSubgrupo + Material.cdCategoria + Material.cdMaterial  = ''' +  @Material + ''')'


         Set @Contador = @Contador + 1
         EXECUTE(@SQL)
         PRINT @SQL
       
    end
     
       set nocount off      
     end



    GO

    Erro==>>

    Msg 245, Level 16, State 1, Procedure _up_TabelaRel592A, Line 68
    Syntax error converting the varchar

    sábado, 1 de setembro de 2012 18:16

Respostas

  • Antonio,

    Se trata de um erro de conversão. Sempre que encontrar a necessidade de construir uma string para executar qualquer tipo de comando, todos os valores que não são do tipo texto devem passar por um conversão.

    No seu caso, a variável @Rir é do tipo INT. Para utilizá-la na string, você deve fazer da seguinte forma:

    if (@Rir IS NOT NULL)       SET @SQL = @SQL + ' AND (_RIR.RI_NR_CODIGO = ' +  CONVERT(VARCHAR, @Rir) + ')'

    Essa foi a única possível causa do erro que encontrei olhando o seu código. Se ele persistir, deve ser porque tem algo parecido em outro trecho.


    []'s
    Philipe Souza
    E-mail: Philipe.s.souza@hotmail.com

    • Marcado como Resposta Harley Araujo quarta-feira, 5 de setembro de 2012 20:45
    domingo, 2 de setembro de 2012 19:34

Todas as Respostas

  • Antonio,

    Se trata de um erro de conversão. Sempre que encontrar a necessidade de construir uma string para executar qualquer tipo de comando, todos os valores que não são do tipo texto devem passar por um conversão.

    No seu caso, a variável @Rir é do tipo INT. Para utilizá-la na string, você deve fazer da seguinte forma:

    if (@Rir IS NOT NULL)       SET @SQL = @SQL + ' AND (_RIR.RI_NR_CODIGO = ' +  CONVERT(VARCHAR, @Rir) + ')'

    Essa foi a única possível causa do erro que encontrei olhando o seu código. Se ele persistir, deve ser porque tem algo parecido em outro trecho.


    []'s
    Philipe Souza
    E-mail: Philipe.s.souza@hotmail.com

    • Marcado como Resposta Harley Araujo quarta-feira, 5 de setembro de 2012 20:45
    domingo, 2 de setembro de 2012 19:34
  • Obrigado Philipe Souza:

    Consegui resolver;

    sexta-feira, 12 de outubro de 2012 23:38