此命令在SQL Server上的工作SQL更新不是整數ID
UPDATE tbl SET name='Hi' WHERE id=''
作品如果「身份證」被設置爲一個整數值,但它不會對H2工作。
什麼可能是解決方案?
此命令在SQL Server上的工作SQL更新不是整數ID
UPDATE tbl SET name='Hi' WHERE id=''
作品如果「身份證」被設置爲一個整數值,但它不會對H2工作。
什麼可能是解決方案?
如果ID是整數,則不應使用引號值:
UPDATE TEST SET NAME='Hi' WHERE ID = 5; // not ID = '5'
許多數據庫將接受報價的版本,但不是由SQL語言規範要求。
即使ID是一個整數,H2也支持ID ='5'...這不是問題。問題在於用戶使用了ID ='',這似乎受MySQL和(可能?)Oracle支持,但不受我測試的任何其他數據庫(PostgreSQL,Derby,HSQLDB)的支持。 –
我不滿意,因爲請求是不控制數據類型的SQL命令生成器的結果。 謝謝。 –
UPDATE TEST SET NAME='Hi' WHERE ID='1';
是在SQL Server中工作,即使id字段是整數 但如果你想更新的行其中id爲空,那麼你必須使用下面的語句:的 UPDATE TEST SET NAME='Hi' WHERE ID is Null;
代替UPDATE TEST SET NAME='Hi' WHERE ID ='';
而且如果id是varchar,那麼您可以使用您的語句來更新ID不爲空的值,並且數據在那裏不可用。 但是如果你想在那裏ID字段的NULL值,那麼你必須使用
UPDATE TEST SET NAME='Hi' WHERE ID is Null;
+1:有些數據庫認爲''和null是等價的(他們不應該這樣做) –
嗨馬克,對於某些數據庫系統可能是肯定的。 –
我不滿意,因爲請求是不控制數據類型的SQL命令生成器的結果。 謝謝。 –
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;
烏爾表架構 – Ghostman
的請提供詳細資料,你怎麼樣通過Java的SQL更新? –
@Philippe Billerot請爲您的問題提供更多實質內容。什麼是您收到確切的錯誤信息?是否有錯誤代碼?你使用的是什麼DBMS? MySQL服務器,MS SQL Server,Oracle? – bakoyaro