[seasar-dotnet:1194] Re: [DBFlute] 予約語とテーブル名の重複について

菊池和彦 [E-MAIL ADDRESS DELETED]
2008年 12月 1日 (月) 20:24:19 JST


菊池です

 SQL Server の場合、テーブル名やカラム名で予約語が含まれる可能性がある場合、
[ ] で名前を括る事で表現できますね。

select ... from [User]

 Userという名前のテーブルからselect

update [User] set [passwd]='xxxx' where [USERID]=xx;

 カラム名やテーブル名に . (ドット)を含む場合にも[]によるクォートが必要になります。

 DBFluteでどうやるかは…悩ましいですね。


2008/12/01 20:12 高井朋幸 <[E-MAIL ADDRESS DELETED]>:
> 久保様
> 高井です。
>
> DBFlute 0.8.7 リリースお疲れ様です、というところすみませんが
> 予約語とテーブル名が重なった場合の対処についてアドバイスいただ
> ければと思います。
>
> SQLServer2005 で「User」のようにテーブル名がデータベースの予約語
> とかぶっていると jdbc.bat や SQL 発行で以下のようにエラーが発生
> してしまいます。
>
> -------------------------
> SQLException: primaryKeyColumnName=USER_ID tableMetaInfo=dbo.USER(TABLE): nu
> ll ignoredMessage=キーワード 'User' 付近に不適切な構文があります。
> -------------------------
>
> とりあえず User テーブルを無視リストに加えて JDBC.bat 実行後に User
> テーブル用の schema.xml を書き加えて強引に generate.bat で
> C# のクラスを作って対処しました (table name="User" として)。
> それを利用すると発行される SQL でやはり同じように SQLException
> が発生してしまいます。
>
> C# のクラスは作成できているので、
> ベタなコーディングでもよいのですが、発行される SQL のテーブル名に
> ダブルコーテーションを付加するなどの回避策はないでしょうか?
> Dbm 名前空間のソースをいじっても変更されなかったようなのでどのあたりを
> いじればいいか教えていただけると幸いです。
>
> 本当は根本原因を解決したいところなのですが…。
> 既存のシステムで利用されている DB なのでテーブル名を変更する
> ことができなくて頭が痛いところです。
> しかも、CRUD すべて対象だし・・・
>
> よろしくお願いいたします。
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>



-- 
 Kazuhiko Kikuchi <[E-MAIL ADDRESS DELETED]>
  Microsoft Valueable Professional - Visual C# 2004-2007


seasar-dotnet メーリングリストの案内