Variáveis em Procedure - Erro conversão
30/07/2020
0
BEGIN SET NOCOUNT ON; SET LANGUAGE BRAZILIAN; declare @CODPROD INT, @SKU INT, @POST_ID INT, @PRECOWOO VARCHAR(10), @ESTOQUEWOO VARCHAR(10), @PRECODESCJIVA DECIMAL(15,2), @PRECOPADRAOJIVA DECIMAL(15,2), @ESTOQUEJIVA DECIMAL(15,2), @AUX_POST_ID INT /* CURSOR PARA ATUALIZAÇÃO DE ESTOQUE E PREÇO */ DECLARE EXPORTACAO_STATUS CURSOR FOR **************** Mensagem 8114, Nível 16, Estado 5, Linha 72 Erro ao converter tipo de dados varchar em numeric.
Estou recebendo essa mensagem de erro ao executar a Procedure, estou utulizando o Management Studio do SQL, como eu posso saber qual variável está com o problema?
Ronaldo Pontes
Post mais votado
30/07/2020
Eu não utilizo o Management Studio do SQL , mais de uma olhada nessa parte do código aonde a msn de erro está apontada!
Uma vez tive um problema de conversão e foi porque meu campo data na base de dados eu coloquei ( vachar) e quando estava programando eu coloquei ele em tipo (date) verifique primeiro qual o campo está dando esse retorno na base de dados e depois de uma olhada na sua aplicação!
Mensagem 8114, Nível 16, Estado 5, Linha 72
Erro ao converter tipo de dados varchar em numeric.
[/code]
Roberto Castelani
Mais Posts
30/07/2020
Ronaldo Pontes
Eu não utilizo o Management Studio do SQL , mais de uma olhada nessa parte do código aonde a msn de erro está apontada!
Uma vez tive um problema de conversão e foi porque meu campo data na base de dados eu coloquei ( vachar) e quando estava programando eu coloquei ele em tipo (date) verifique primeiro qual o campo está dando esse retorno na base de dados e depois de uma olhada na sua aplicação!
Mensagem 8114, Nível 16, Estado 5, Linha 72
Erro ao converter tipo de dados varchar em numeric.
[/code]
Bom dia Roberto, obrigado.
Já tentei mudar o valor das variáveis,
Preciso ver onde eu posso testar essa Procedure, pq no Management não tem mais a opção do debug.
Também acho que o campo da tabela está trazendo valores mistos
30/07/2020
Emerson Nascimento
provavelmente há uma concatenação, ou talvez uma operação com variáveis com conteúdo incompatível.
talvez sejam essas variáveis:
@PRECOWOO VARCHAR(10), @ESTOQUEWOO VARCHAR(10),
difícil responder sem a procedure completa.
30/07/2020
Ronaldo Pontes
provavelmente há uma concatenação, ou talvez uma operação com variáveis com conteúdo incompatível.
talvez sejam essas variáveis:
@PRECOWOO VARCHAR(10), @ESTOQUEWOO VARCHAR(10),
difícil responder sem a procedure completa.
USE [JIVA_PROD] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO BEGIN SET NOCOUNT ON; SET LANGUAGE BRAZILIAN; declare @CODPROD INT, @SKU INT, @POST_ID INT, @PRECOWOO INT, @ESTOQUEWOO INT, @PRECODESCJIVA DECIMAL(15,2), @PRECOPADRAOJIVA DECIMAL(15,2), @ESTOQUEJIVA DECIMAL(15,2), @AUX_POST_ID INT /* CURSOR PARA ATUALIZAÇÃO DE ESTOQUE E PREÇO */ DECLARE EXPORTACAO_STATUS CURSOR FOR SELECT PRO.CODPROD, WOO.id AS post_id, PRC.meta_value AS woocommercesaleprice, JIVA.FN_PRECO_VENDA_ECOMMERCE(PRO.CODPROD) AS '_price', JIVA.FN_PRECO_VENDA_ECOMMERCE_PADRAO(PRO.CODPROD) AS '_regular_price', preco.meta_value AS PRECOPADRAOWOO, ES.meta_value AS woocommercestock, CASE WHEN ISNULL(est.SALDO, 0) - ISNULL(pro.AD_ESTMINLV, 0.00) <= 0 THEN 0 ELSE ISNULL(est.SALDO, 0) - ISNULL(pro.AD_ESTMINLV, 0.00) END AS '_stock', EST.SALDO, EST.CODLOCAL FROM JIVA.TGFPRO AS PRO WITH (nolock) INNER JOIN (SELECT id, sku FROM OPENQUERY(woocommerce, 'select id, sku from wp_ixd5jn_posts where post_type = ''product'' and post_status = ''publish'' and sku is not null') AS derivedtbl_1) AS WOO ON WOO.sku = PRO.CODPROD LEFT OUTER JOIN (SELECT CODPROD, CODLOCAL, SUM(ESTOQUE - RESERVADO) AS SALDO FROM JIVA.TGFEST WITH (NOLOCK) WHERE (CODEMP = 1) GROUP BY CODLOCAL, CODPROD) AS EST ON EST.CODPROD = PRO.CODPROD LEFT OUTER JOIN (SELECT post_id, meta_value FROM OPENQUERY(woocommerce, 'select post_id, meta_value from wp_ixd5jn_postmeta where meta_key = ''_sale_price''') AS derivedtbl_2) AS PRC ON PRC.post_id = WOO.id LEFT OUTER JOIN (SELECT post_id, meta_value FROM OPENQUERY(woocommerce, 'select post_id, meta_value from wp_ixd5jn_postmeta where meta_key = ''_price''') AS derivedtbl_3) AS preco ON preco.post_id = WOO.id LEFT OUTER JOIN (SELECT post_id, meta_value FROM OPENQUERY(woocommerce, 'select post_id, meta_value from wp_ixd5jn_postmeta where meta_key = ''_stock''') AS derivedtbl_4) AS ES ON ES.post_id = WOO.id LEFT OUTER JOIN (SELECT post_id, meta_value FROM OPENQUERY(woocommerce, 'select post_id, meta_value from wp_ixd5jn_postmeta where meta_key = ''_stock_status''') AS derivedtbl_5) AS EST_ST ON EST_ST.post_id = WOO.id LEFT OUTER JOIN JIVA.TGFDES AS D ON D.CODPROD = PRO.CODPROD AND D.DTINICIAL <= GETDATE() AND D.DTFINAL >= GETDATE() AND D.CODTAB = 15 WHERE (PRO.AD_USADOLV = 'S') AND (PRO.ATIVO = 'S') AND (PRO.AD_ATIVOLV = 'D') AND (EST.CODLOCAL = 1000) AND ( (cast(cast(PRC.meta_value as varchar(10)) as decimal(15,2)) != case when d.VLRVENDA > 0 then d.VLRVENDA else case when d.PERCENTUAL > 0 then cast(jiva.SNK_PRECO(0,PRO.CODPROD) * ((100-d.PERCENTUAL)/100) as decimal (15,2)) else case when d.VLRDESC > 0 then jiva.SNK_PRECO(0,PRO.CODPROD) - d.VLRDESC else jiva.SNK_PRECO(0,PRO.CODPROD) end end end) or (cast(cast(preco.meta_value as varchar(10)) as decimal(15,2)) != case when d.VLRVENDA > 0 then d.VLRVENDA else case when d.PERCENTUAL > 0 then cast(jiva.SNK_PRECO(0,PRO.CODPROD) * ((100-d.PERCENTUAL)/100) as decimal (15,2)) else case when d.VLRDESC > 0 then jiva.SNK_PRECO(0,PRO.CODPROD) - d.VLRDESC else jiva.SNK_PRECO(0,PRO.CODPROD) end end end) or (cast(cast(ES.meta_value as varchar(10)) as decimal(15,2)) != CASE WHEN ISNULL(est.SALDO,0)-ISNULL(pro.AD_ESTMINLV,0) <= 0 THEN 0 ELSE ISNULL(est.SALDO,0)-ISNULL(pro.AD_ESTMINLV,0) END) ) OPEN EXPORTACAO_STATUS FETCH NEXT FROM EXPORTACAO_STATUS INTO @CODPROD, @POST_ID, @PRECOWOO, @PRECODESCJIVA, @PRECOPADRAOJIVA, @ESTOQUEWOO, @ESTOQUEJIVA WHILE @@FETCH_STATUS = 0 BEGIN /* Se o preço calculado no Jiva é diferente do preço que está ativo na loja, faz um update nos campos */ IF @PRECODESCJIVA != CAST(@PRECOWOO AS DECIMAL(15,2)) begin UPDATE OPENQUERY(WOOCOMMERCE,'SELECT `post_id`, `meta_key`, `meta_value` from `wp_ixd5jn_postmeta`') set meta_value = CAST(@PRECODESCJIVA AS VARCHAR(10)) where post_id = @POST_ID and meta_key = '_sale_price'; end /* Se o preço calculado no Jiva é diferente do preço que está ativo na loja, faz um update nos campos */ IF @PRECOPADRAOJIVA != CAST(@PRECOWOO AS DECIMAL(15,2)) BEGIN UPDATE OPENQUERY(WOOCOMMERCE,'SELECT `post_id`, `meta_key`, `meta_value` from `wp_ixd5jn_postmeta`') set meta_value = CAST(@PRECOPADRAOJIVA AS VARCHAR(10)) where post_id = @POST_ID and meta_key = '_regular_price'; END IF @PRECODESCJIVA != CAST(@PRECOWOO AS DECIMAL(15,2)) AND @PRECODESCJIVA != @PRECOPADRAOJIVA BEGIN UPDATE OPENQUERY(WOOCOMMERCE,'SELECT `post_id`, `meta_key`, `meta_value` from `wp_ixd5jn_postmeta`') set meta_value = CAST(@PRECODESCJIVA AS VARCHAR(10)) where post_id = @POST_ID and meta_key = '_price'; end ELSE BEGIN UPDATE OPENQUERY(WOOCOMMERCE,'SELECT `post_id`, `meta_key`, `meta_value` from `wp_ixd5jn_postmeta`') set meta_value = CAST(@PRECOPADRAOJIVA AS VARCHAR(10)) where post_id = @POST_ID and meta_key = '_price'; END /* Se o estoque calculado no Jiva é diferente do estoque que está ativo na loja, faz um update nos campos */ IF @ESTOQUEJIVA != CAST(@ESTOQUEWOO AS DECIMAL(15,2)) BEGIN UPDATE OPENQUERY(WOOCOMMERCE,'SELECT `post_id`, `meta_key`, `meta_value` from `wp_ixd5jn_postmeta`') set meta_value = CAST(@ESTOQUEJIVA AS VARCHAR(10)) where post_id = @POST_ID and meta_key = '_stock'; END FETCH NEXT FROM EXPORTACAO_STATUS INTO @CODPROD, @POST_ID, @PRECOWOO, @PRECODESCJIVA, @PRECOPADRAOJIVA, @ESTOQUEWOO, @ESTOQUEJIVA END CLOSE EXPORTACAO_STATUS DEALLOCATE EXPORTACAO_STATUS END Mensagem 8114, Nível 16, Estado 5, Linha 67 Erro ao converter tipo de dados varchar em numeric.
Conteúdo do Selec:
CODPROD post_id woocommercesaleprice _price _regular_price PRECOPADRAOWOO woocommercestock _stock SALDO CODLOCAL 7094 8394 72.33 72,33 72,33 72.33 3.00 3 13 1000 7097 8395 114.44 114,44 114,44 114.44 instock 3 13 1000
30/07/2020
Emerson Nascimento
PRO.CODPROD WOO.id AS post_id PRC.meta_value AS woocommercesaleprice JIVA.FN_PRECO_VENDA_ECOMMERCE(PRO.CODPROD) AS '_price' JIVA.FN_PRECO_VENDA_ECOMMERCE_PADRAO(PRO.CODPROD) AS '_regular_price' preco.meta_value AS PRECOPADRAOWOO ES.meta_value AS woocommercestock CASE WHEN ISNULL(est.SALDO, 0) - ISNULL(pro.AD_ESTMINLV, 0.00) <= 0 THEN 0 ELSE ISNULL(est.SALDO, 0) - ISNULL(pro.AD_ESTMINLV, 0.00) END AS '_stock' EST.SALDO EST.CODLOCAL
agora as variáveis que irão receber esses valores:
@CODPROD @POST_ID @PRECOWOO @PRECODESCJIVA @PRECOPADRAOJIVA @ESTOQUEWOO @ESTOQUEJIVA
o retorno que você apresentou:
CODPROD post_id woocommercesaleprice _price _regular_price PRECOPADRAOWOO woocommercestock _stock SALDO CODLOCAL 7094 8394 72.33 72,33 72,33 72.33 3.00 3 13 1000 7097 8395 114.44 114,44 114,44 114.44 instock 3 13 1000
ou seja:
@CODPROD = CODPROD @POST_ID = post_id @PRECOWOO = woocommercesaleprice @PRECODESCJIVA = _price @PRECOPADRAOJIVA = _regular_price @ESTOQUEWOO = PRECOPADRAOWOO @ESTOQUEJIVA = woocommercestock
se eu tabulei o resultado corretamente, no segundo registro o campo woocommercestock é um varchar com conteúdo 'instock'.
se for mesmo assim, o motor do banco não está conseguindo transformar 'instock' num número para atribuir à variável @ESTOQUEJIVA.
30/07/2020
Ronaldo Pontes
PRO.CODPROD WOO.id AS post_id PRC.meta_value AS woocommercesaleprice JIVA.FN_PRECO_VENDA_ECOMMERCE(PRO.CODPROD) AS '_price' JIVA.FN_PRECO_VENDA_ECOMMERCE_PADRAO(PRO.CODPROD) AS '_regular_price' preco.meta_value AS PRECOPADRAOWOO ES.meta_value AS woocommercestock CASE WHEN ISNULL(est.SALDO, 0) - ISNULL(pro.AD_ESTMINLV, 0.00) <= 0 THEN 0 ELSE ISNULL(est.SALDO, 0) - ISNULL(pro.AD_ESTMINLV, 0.00) END AS '_stock' EST.SALDO EST.CODLOCAL
agora as variáveis que irão receber esses valores:
@CODPROD @POST_ID @PRECOWOO @PRECODESCJIVA @PRECOPADRAOJIVA @ESTOQUEWOO @ESTOQUEJIVA
o retorno que você apresentou:
CODPROD post_id woocommercesaleprice _price _regular_price PRECOPADRAOWOO woocommercestock _stock SALDO CODLOCAL 7094 8394 72.33 72,33 72,33 72.33 3.00 3 13 1000 7097 8395 114.44 114,44 114,44 114.44 instock 3 13 1000
ou seja:
@CODPROD = CODPROD @POST_ID = post_id @PRECOWOO = woocommercesaleprice @PRECODESCJIVA = _price @PRECOPADRAOJIVA = _regular_price @ESTOQUEWOO = PRECOPADRAOWOO @ESTOQUEJIVA = woocommercestock
se eu tabulei o resultado corretamente, no segundo registro o campo woocommercestock é um varchar com conteúdo 'instock'.
se for mesmo assim, o motor do banco não está conseguindo transformar 'instock' num número para atribuir à variável @ESTOQUEJIVA.
Emerson muito obrigado pela ajuda, muitas variáveis nessa consulta, conseguir pegar algumas.
Valeu!!!
Clique aqui para fazer login e interagir na Comunidade :)