2011-11-10 4 views
1

このコマンドでSQLの更新は、SQL Server上の整数ID

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

作品を動作していないが、それはH2上では動作しません。

解決策はありますか? IDが整数の場合

+2

は、Javaを介してSQLの更新を行っているどのようにウルテーブルスキーマ – Ghostman

+0

の詳細を提供してください? –

+0

@Philippe Billerotあなたの質問にもっと物質を提供してください。あなたが受信している正確なエラーメッセージは何ですか?エラーコードはありますか?どのDBMSを使用していますか? MySQLサーバー、MS SQL Server、Oracle? – bakoyaro

答えて

6

、あなたは価値のために引用符を使用しないでください。

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

多くのデータベースが引用されたバージョンを受け入れますが、SQL言語仕様によって必要とされていません。 idフィールドが 整数ですが、あなたは、idがnullの行を更新したい場合は、あなたがステートメントの下に使用する必要がある場合でも、SQL Serverの中で働いている

+0

H2はIDが整数の場合でもID = '5'をサポートしています...これは問題ではありません。問題は、ユーザーがID = ''を使用したことです。これはMySQLと(おそらく?)Oracleではサポートされているようですが、私がテストした他のデータベース(PostgreSQL、Derby、HSQLDB)ではサポートされていません。 –

+0

要求がデータの種類を制御しないSQLコマンドのジェネレータの結果であるため、私は満足できません。 ありがとうございます。 –

4

UPDATE TEST SET NAME='Hi' WHERE ID='1';UPDATE TEST SET NAME='Hi' WHERE ID is Null; 代わりUPDATE TEST SET NAME='Hi' WHERE ID ='';

のとidがvarcharの場合は、ステートメントを使用してIDがnullでなく、データがそこで使用できない値を更新できます。 しかし、あなたはIDフィールドのNULL値はその後、あなたはそれが数に空の文字列''を変換することはできませんので

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

+0

+1:一部のデータベースで ''とnullを等価であると考えています(どちらにしてもかまいません) –

+0

ハイマークは、一部のデータベースシステムではyesです。 –

+0

要求がデータの種類を制御しないSQLコマンドのジェネレータの結果であるため、私は満足できません。 ありがとうございます。 –

0

H2が例外をスロー使用する必要がどこのレコードの値を更新する場合。 H2は内部でで失敗するjava.lang.Long.parseLong("")を使用します。 SQLスクリプトの

Data conversion error converting [22018-161] 

他のほとんどのデータベース(PostgreSQLの、Apache Derbyを、HSQLDB)と同様の例外をスロー:

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は、例外がスローされます。

あなたは番号を使用する必要が

、またはIS NULLなどで:

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

または

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