Обновление SQL не работает с целочисленным идентификатором - PullRequest
1 голос
/ 10 ноября 2011

Эта команда на SQL Server

UPDATE tbl SET name='Hi' WHERE id=''

работает, если в качестве целочисленного значения задано 'id', но не работает на H2.

В чем может быть решение?

Ответы [ 3 ]

6 голосов
/ 10 ноября 2011

Если идентификатор целочисленный, вы не должны использовать кавычки для значения:

UPDATE TEST SET NAME='Hi' WHERE ID = 5; // not ID = '5'

Многие базы данных будут принимать указанную версию, но это не требуется в спецификации языка SQL.

4 голосов
/ 10 ноября 2011

UPDATE TEST SET NAME='Hi' WHERE ID='1'; это работает на сервере sql, даже если поле id целое но если вы хотите обновить строку, в которой идентификатор равен нулю, вы должны использовать следующую инструкцию: UPDATE TEST SET NAME='Hi' WHERE ID is Null; вместо UPDATE TEST SET NAME='Hi' WHERE ID ='';

И если id - это varchar, то вы можете использовать свое утверждение для обновления значений, где ID не равен NULL, а данные там недоступны. Но если вы хотите обновить значения для записи, где NULL значение поля идентификатора, то вы должны использовать

UPDATE TEST SET NAME='Hi' WHERE ID is Null;

0 голосов
/ 11 ноября 2011

H2 вызывает исключение, потому что не может преобразовать пустую строку '' в число.H2 внутренне использует java.lang.Long.parseLong(""), который завершается с java.lang.NumberFormatException: For input string: "".

Для сценария SQL:

drop table tbl;
create table tbl(id int primary key, name varchar(255));
insert into tbl values(1, 'Hello');
UPDATE tbl SET name='Hi' WHERE id='';

H2 выдает исключение:

Data conversion error converting  [22018-161]

Большинство другихбазы данных (PostgreSQL, Apache Derby, HSQLDB) выдают аналогичное исключение.

Вам необходимо использовать число или IS NULL, например:

UPDATE tbl SET name='Hi' WHERE id IS NULL;

или

UPDATE tbl SET name='Hi' WHERE id = 0;
...