Heidisql: Heidi SQL não atualiza corretamente os registros usando um campo com bit de tipo de dados

Criado em 15 mai. 2018  ·  5Comentários  ·  Fonte: HeidiSQL/HeidiSQL

Etapas para reproduzir este problema

  1. Passo 1; Crie uma tabela simples com "ID" (int); "texto(varchar50)"; "tipo de bit" (bit)
  2. Passo 2; Preencha a tabela com 2 registros de acordo com seus tipos de dados.
  3. Etapa N; Atualize o texto com outro texto e pressione o botão "postar"
  4. Então eu recebo ... o erro "Erro SQL (102): Sintaxe incorreta perto de '0'

Comportamento atual

o problema é que o SQL gerado não está de acordo com os padrões do SQL por isso o erro aparece.
Amostra
UPDATE TOP(1) "Checkmarx",."dbo",."tabela de teste de bits"
SET "texto"='teste5'
ONDE "ID" = 4
E "texto"='teste4'
E "tipo de bit" = b'0';
/* Erro SQL (102): Sintaxe incorreta perto de '0'. */
a razão é porque o "tipo de bit" = b'0' está incorreto. o "b" não deveria estar lá!

Comportamento esperado

UPDATE TOP(1) "Checkmarx",."dbo",."tabela de teste de bits"
SET "texto"='teste5'
ONDE "ID" = 4
E "texto"='teste4'
E "tipo de bit" = '0';
Esta é a sintaxe corrigida manualmente sem o "b". isso pode ser executado normalmente na opção "query" e o texto é atualizado corretamente para 'test5'

Solução possível

altere a ferramenta para que ela crie a sintaxe SQL correta para o servidor Microsoft SQL para que esse erro desapareça. Eu poderia olhar para o código mais tarde para fornecer mais detalhes, se necessário.

Meio Ambiente

  • Versão HeidiSQL:

    versão 9.5.0.5278 mais recente construída

  • Sistema de banco de dados e versão:

    Não tenho certeza, mas parece que a sintaxe pode estar correta para outro banco de dados que não o Microsoft SQL, portanto, é relevante mencionar o banco de dados.

mais recente construído do servidor MSSQL 2012 construído 11.0.7469.6

  • Sistema operacional:

Não é relevante

Comentários muito úteis

Oi,
Eu olhei para o código, aparece o problema no arquivo dbconnections.pas , existem 3 linhas onde 'b' é usado. parece que na linha 7290 é específico do MYSQL, a função genérica parece estar na linha 6628. provavelmente o problema está lá. 'b' não deve ser adicionado no caso de MSSQL. esta é a minha recomendação. Não consigo testar é porque não tenho ambiente para construir uma nova versão. Eu espero que isso ajude!

Todos 5 comentários

Oi,
Eu olhei para o código, aparece o problema no arquivo dbconnections.pas , existem 3 linhas onde 'b' é usado. parece que na linha 7290 é específico do MYSQL, a função genérica parece estar na linha 6628. provavelmente o problema está lá. 'b' não deve ser adicionado no caso de MSSQL. esta é a minha recomendação. Não consigo testar é porque não tenho ambiente para construir uma nova versão. Eu espero que isso ajude!

Também tenho esse problema, sempre acontece ao editar um campo em uma tabela MSSQL que não possui Chave Primária.

Eu tenho o mesmo problema no MSSQL, mas tenho uma chave primária.
Quando eu mudo o UserName, todos os campos de bits mudam para "T,rue" ou "F,alse"
Mas quando eu atualizo eu me torno 1's e 0's.

CREATE TABLE "UsersFile" (
"UserId" INT NÃO NULO,
"UserActive" BIT NULL DEFAULT NULL,
"userrealname" VARCHAR(100) NULL DEFAULT NULL,
"UserName" VARCHAR(15) NOT NULL,
"Senha" VARCHAR(32) NULL DEFAULT NULL,
"ViewRight" BIT NULL DEFAULT NULL,
"AddRight" BIT NULL DEFAULT NULL,
"EditRight" BIT NULL DEFAULT NULL,
"DeleteRight" BIT NULL DEFAULT NULL,
"UserActivityRight" BIT NULL DEFAULT NULL,
"ManagmentRight" BIT NULL DEFAULT NULL,
CHAVE PRIMÁRIA ("Nome de usuário"),
ÍNDICE ÚNICO "ÚNICO" ("UserId")
)
;

Isso ainda é um problema no HeidiSQL versão 11.0.0.6049 (64 bits) com MSSQL 13.0 (SQL Server 2016).

De acordo com a documentação, os números simples 0 e 1 devem ser suficientes:
https://docs.microsoft.com/en-us/sql/t-sql/data-types/constants-transact-sql?view=sql-server-2016#bit -constants

Alternativamente, eles às vezes são colocados entre parênteses, como em (0) e (1) .

@ansgarbecker acordado? 🙂

Esta página foi útil?
0 / 5 - 0 avaliações