Usuário com melhor resposta
Procedure com as ações de ler e incluir

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
GOErro==>>
Msg 245, Level 16, State 1, Procedure _up_TabelaRel592A, Line 68
Syntax error converting the varchar
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
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
-