Pergunta

Preciso de ajuda para escrever consultas que atualizarão tabelas MySql do SQL Server.Criei um servidor vinculado e as consultas selecionadas funcionam bem, mas estou recebendo erros ao atualizar.Sou realmente novo em escrever esse tipo de consulta, então, por favor, ajude-me a entender a mensagem de erro e o que ela significa.

Minha consulta de atualização:

UPDATE openquery(stagedb_za, 'Select acm_flag FROM aol_center WHERE nid = 6439')
Set acm_flag = 'P' 

Erro:

O provedor OLE DB "MSDASQL" para o servidor vinculado "stagedb_za" retornou a mensagem "A linha não pode ser localizada para atualização.Alguns valores podem ter sido alterados desde a última leitura.".MSG 7343, Nível 16, Estado 4, linha 1 O provedor de DB OLE "MSDASQL" para servidor vinculado não pôde atualizar a tabela [MSDASQL].O conjunto de linhas estava usando simultaneidade otimista e o valor de uma coluna foi alterado depois que a linha que o contém foi buscada ou ressincronizada pela última vez.

Foi útil?

Solução 2

Ok, recebi a resposta.Parece que quando você está atualizando o valor da coluna e se o novo valor for igual ao existente, ele será tratado como se não houvesse alteração, portanto nenhuma atualização ocorrerá.

No meu caso eu estava atualizando acm_flag para 'P' mas seu valor já era 'P' então nenhuma atualização aconteceu.Quando tentei atualizá-lo para um valor diferente, funcionou perfeitamente.

Outras dicas

Todo esse problema desaparece com uma configuração no conector MySQL ODBC.

No SQL Server que está vinculado ao MySQL, acesse a tela de configuração na conexão MySQL ODBC usada pelo servidor vinculado.Abra "Detalhes".Na aba "cursor/resultados".Coloque uma marca em "Retornar linhas correspondentes em vez de linhas afetadas".

Ao fazer essa alteração na configuração, as atualizações que definem um valor de campo MySQL para o valor que ele já possui não retornarão um erro.

Antes de descobrir isso em outro fórum, coloquei MUITO código para filtrar os valores incorretos campo por campo.Isso é facil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top