Procedure Inserir dados MySQL

12/08/2020

0

Boa tarde,

Estou com uma situação para inserir os dados em uma tabela do MySQL, enquanto não tem caracteres especiais o UPDATE funciona, na linha que tem ele já para:



DECLARE
	@VERIFICACADASTROS	NVARCHAR(MAX),
	@CADASTRADO			INT,
	@POST_DATE			DATETIME,
	@POST_DATE_GMT		DATETIME,
	@POST_CONTENT		NVARCHAR(MAX),
	@POST_TITLE			NVARCHAR(MAX),
	@POST_EXCERPT		NVARCHAR(MAX),
	@POST_NAME			NVARCHAR(MAX),
	@POST_MODIFIED		DATETIME,
	@POST_MODIFIED_GMT	DATETIME,
	@INSERT				NVARCHAR(MAX),
	@UPDATE				NVARCHAR(MAX),
	@SALDO				INT,
	@ESTOQUE			NVARCHAR(10),
	@PRECO				DECIMAL(15,2),
	@ALTURA				INT,
	@LARGURA			INT,
	@COMPRIMENTO		INT,
	@PESO				INT,
	@SKU				INT


	DECLARE ATUALIZA_PRODUTOS CURSOR FOR
	SELECT pro.CODPROD FROM jiva.TGFPRO PRO with(nolock)
	LEFT JOIN (SELECT sku FROM openquery(woocommerce, ''''select sku from wp_ixd5jn_posts where post_type = ''''''''product'''''''' and post_status = ''''''''publish'''''''' and sku is NOT null'''')) AS WOO ON WOO.sku = PRO.CODPROD 
	WHERE PRO.AD_USADOLV = ''''S'''' AND ATIVO = ''''S'''' AND AD_NOMEPRDLV IS NOT NULL AND AD_ATIVOLV = ''''D''''
	AND PRO.AD_ALTERCAO IS NOT NULL AND WOO.SKU IS NOT NULL
	OPEN ATUALIZA_PRODUTOS
	FETCH NEXT FROM ATUALIZA_PRODUTOS INTO @CODPROD
	WHILE @@FETCH_STATUS = 0
	BEGIN

		/* OBTÉM AS INFORMAÇÕES DO PRODUTO */
		SELECT
		@POST_DATE = GETDATE(),
		@POST_DATE_GMT = DATEADD(HOUR,+3,GETDATE()),
		@POST_CONTENT = ISNULL(AD_DESCLONGALV,ISNULL(AD_DESCURTALV,ISNULL(AD_NOMEPRDLV,DESCRPROD))),
		@POST_TITLE = (AD_NOMEPRDLV),
		@POST_EXCERPT = ISNULL(AD_DESCURTALV,ISNULL(AD_NOMEPRDLV,DESCRPROD)),
		@POST_NAME = CAST(PRO.CODPROD AS VARCHAR(5)) + ''''-'''' + [jiva].[FN_NOME_PRODUTO_LOJA_VIRTUAL](AD_NOMEPRDLV),
		@POST_MODIFIED = GETDATE(),
		@POST_MODIFIED_GMT = DATEADD(HOUR,+3,GETDATE())
		from jiva.TGFPRO PRO with(nolock)
		WHERE PRO.AD_USADOLV = ''''S'''' AND AD_USADOLV = ''''S'''' AND ATIVO = ''''S'''' AND AD_NOMEPRDLV IS NOT NULL AND AD_ATIVOLV = ''''D''''
		AND PRO.CODPROD = @CODPROD


	UPDATE OPENQUERY(WOOCOMMERCE, ''''select ID, post_title, post_name, post_content, post_excerpt, post_modified, post_modified_gmt, sku from wp_ixd5jn_posts where post_type = ''''''''product'''''''' and post_status = ''''''''publish'''''''' and sku is NOT null'''')
		set post_title = @POST_TITLE COLLATE DATABASE_DEFAULT 
		WHERE sku = @codprod
	
	Print   @POST_TITLE

	FETCH NEXT FROM ATUALIZA_PRODUTOS INTO @CODPROD
	END
	CLOSE ATUALIZA_PRODUTOS
	DEALLOCATE ATUALIZA_PRODUTOS

END



Já tentei mudar a COLLECTION para outras opções sem sucesso:

a saida do erro é a seguinte:



Porta macho M8 norma DIN-376 tamanho TC-820
PROTETOR DE BORRACHA FRONTRAL SANFONADO PARA BARRAMENTOS DE 380 X 330MM
PROTETOR DE BORRACHA TRASEIRO LISO PARA BARRAMENTOS DE 450 X 850MM  

O provedor do OLE DB "MSDASQL" para o servidor vinculado "WOOCOMMERCE" retornou a mensagem "[MySQL][ODBC 8.0(a) Driver][mysqld-5.7.17-13-log]Incorrect string value: ''''\xC7O R\xC1P...'''' for column ''''post_title'''' at row 1".
Mensagem 7343, Nível 16, Estado 4, Linha 85
O provedor do OLE DB "MSDASQL" para o servidor vinculado "WOOCOMMERCE" não pôde UPDATE a tabela "[MSDASQL]". 



A quantidade de caracteres nesse campo é bem grande, e tem vários caracteres especiais, é a descrição do produto.

Será que preciso converter o campo para algum outro?

Estou utilizando o SQL com o servidor vinculado Mysql

Grato.
Ronaldo Pontes

Ronaldo Pontes

Responder

Posts

13/08/2020

Stella Oliveira

Ei Ronaldo, por ser uma situação bem complexa recomendo você usar aquela boa prática de "dividir para conquistar", divida sua procedure em etapas rodando separadamente cada ação para entender onde está de fato quebrando e assim poder resolver o seu problema.

Caso queira fazer junto pode entrar em contato comigo live:stellabertthiolly_1 e fazemos uma call via skype.

Abraço !
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar