Heidisql: Heidi SQL неправильно обновляет записи, используя поле с битом типа данных

Созданный на 15 мая 2018  ·  5Комментарии  ·  Источник: HeidiSQL/HeidiSQL

Действия по воспроизведению этой проблемы

  1. Шаг 1; Создайте простую таблицу с «ID» (int); "текст(varchar50)"; "битовый тип" (bit)
  2. Шаг 2; Заполните таблицу двумя записями в соответствии с их типами данных.
  3. Шаг N; Обновите текст другим текстом и нажмите кнопку «Опубликовать».
  4. Затем я получаю... ошибку "Ошибка SQL (102): неправильный синтаксис рядом с "0"

Текущее поведение

проблема в том, что сгенерированный SQL не соответствует стандартам SQL, поэтому появляется ошибка.
Образец
UPDATE TOP(1) "Checkmarx"."dbo"."таблица битовых тестов"
УСТАНОВИТЬ "текст" = 'test5'
ГДЕ "ID"=4
И "текст"='test4'
И "битовый тип"=b'0';
/* Ошибка SQL (102): неправильный синтаксис рядом с '0'. */
причина в том, что «битовый тип» = b'0' неверен. буквы "б" быть не должно!

Ожидаемое поведение

UPDATE TOP(1) "Checkmarx"."dbo"."таблица битовых тестов"
УСТАНОВИТЬ "текст" = 'test5'
ГДЕ "ID"=4
И "текст"='test4'
И «битовый тип» = «0»;
Это исправленный вручную синтаксис без "b". это можно нормально запустить в опции «запрос», и текст правильно обновляется до «test5»

Возможное решение

измените инструмент, чтобы он создавал правильный синтаксис SQL для сервера Microsoft SQL, чтобы эта ошибка исчезла. Я мог бы изучить код позже, чтобы предоставить более подробную информацию, если это необходимо.

Окружающая обстановка

  • Версия HeidiSQL:

    версия 9.5.0.5278 последняя сборка

  • Система базы данных и версия:

    Я не уверен, но похоже, что синтаксис может быть правильным для другой базы данных, чем Microsoft SQL, поэтому уместно упомянуть БД.

последняя сборка сервера MSSQL 2012 года сборки 11.0.7469.6

  • Операционная система:

не имеет значения

Самый полезный комментарий

Привет,
Я просмотрел код, и оказалось, что проблема в файле dbconnections.pas, есть 3 строки, где используется «b». похоже, что в строке 7290 специфична для MYSQL, а общая функция находится в строке 6628. Скорее всего, проблема в этом. 'b' не следует добавлять в случае MSSQL. это моя рекомендация. Я не могу проверить это, так как у меня нет среды для создания новой версии. Надеюсь, это поможет!

Все 5 Комментарий

Привет,
Я просмотрел код, и оказалось, что проблема в файле dbconnections.pas, есть 3 строки, где используется «b». похоже, что в строке 7290 специфична для MYSQL, а общая функция находится в строке 6628. Скорее всего, проблема в этом. 'b' не следует добавлять в случае MSSQL. это моя рекомендация. Я не могу проверить это, так как у меня нет среды для создания новой версии. Надеюсь, это поможет!

У меня также есть эта проблема, это всегда происходит при редактировании поля в таблице MSSQL, у которой нет первичного ключа.

У меня такая же проблема с MSSQL, но у меня есть первичный ключ.
Когда я меняю имя пользователя, все битовые поля меняются на «T, rue» или «F, alse».
Но когда я обновляюсь, я становлюсь 1 и 0.

СОЗДАТЬ ТАБЛИЦУ "UsersFile" (
"Идентификатор пользователя" INT NOT NULL,
"UserActive" БИТ НУЛЬ ПО УМОЛЧАНИЮ НУЛЬ,
"настоящее имя пользователя" VARCHAR(100) NULL ПО УМОЛЧАНИЮ NULL,
"Имя пользователя" VARCHAR(15) НЕ NULL,
"Пароль" VARCHAR(32) NULL ПО УМОЛЧАНИЮ NULL,
"ViewRight" БИТ НУЛЬ ПО УМОЛЧАНИЮ НУЛЬ,
"AddRight" БИТ НУЛЬ ПО УМОЛЧАНИЮ НУЛЬ,
"EditRight" БИТ НОЛЬ ПО УМОЛЧАНИЮ НОЛЬ,
"DeleteRight" БИТ НОЛЬ ПО УМОЛЧАНИЮ НОЛЬ,
"UserActivityRight" БИТ НОЛЬ ПО УМОЛЧАНИЮ НОЛЬ,
"ManagmentRight" БИТ НОЛЬ ПО УМОЛЧАНИЮ НОЛЬ,
ПЕРВИЧНЫЙ КЛЮЧ ("Имя пользователя"),
УНИКАЛЬНЫЙ ИНДЕКС "УНИКАЛЬНЫЙ" ("UserId")
)
;

Это все еще проблема в HeidiSQL версии 11.0.0.6049 (64-разрядная версия) с MSSQL 13.0 (SQL Server 2016).

Согласно документации, голых чисел 0 и 1 должно быть достаточно:
https://docs.microsoft.com/en-us/sql/t-sql/data-types/constants-transact-sql?view=sql-server-2016#bit-константы

В качестве альтернативы они иногда заключаются в круглые скобки, например, (0) и (1) .

@ansgarbecker проснулся ? 🙂

Была ли эта страница полезной?
0 / 5 - 0 рейтинги