- - PR -
varchrで自動採番
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-02-23 11:00
いつもありがとうございます。
以前こちらの掲示板で自動採番の方法を教えていただいたのですが(IDENTITYを使用 したほうがよい)再度教えて下さい。 @社員IDを主キーとしてますが型がvarchrの7桁(例えばID100の社員でしたらIDの頭に0000をつけ0000110となります)でした。int型であればIDENTITYを使うのですが ・・。上記の型で自動採番をなんとかできませんでしょうか? よろしくおねがいします。 | ||||
|
投稿日時: 2008-02-23 13:15
桁数を指定したゼロパディングってのは、数値型じゃできないんじゃないかな。
だってそもそも数値じゃなくなるし。 データベース上で何とかしたいなら、普通にIDENTITYなカラムを作っておき、 そのカラムにゼロパティングしたVARCHARなカラムを別途作成ってあたりに なるんでしょうか。 トリガ使っちゃってもいいかな? RDBMSによっちゃ独自の機能で対応できる部分もあるかもですが。 そーゆーのはRDBMSじゃなくてアプリ側でやるもんじゃないかな、って気もしますけど。 | ||||
|
投稿日時: 2008-02-23 23:04
OakBowさんと同じですが
1)varcharで自動採番はできないです。(0,1,2,3,4,5,6,7,8,9。。。9の次はAでしょうか?) 2)トリガーで作ればいいじゃないですかね 3)あと、「社員IDの前に0000を入れと。。」と自動採番がなんで リンクしてるんでしょうか?2つの問題がある、いや3つあると思いますが? A)なぜvarchar B) 前に0000を入れるのは?(0000を入れるためにvarchar?) C) 自動採番 (どこの部分?0000は常に0000か?) 参考になればと思います。 | ||||
|
投稿日時: 2008-02-24 01:05
皆様書き込みありがとうございます。 A)元々のテーブルの仕様です B)数字の7桁でIDを作成しなくてはいけないのです(0000を入れるためにvarcharです) c)1〜9999999となり0000は7桁にあわせるためです。 よろしくお願いします。 | ||||
|
投稿日時: 2008-02-24 02:14
私ならそのゼロパティングはアプリ側でやっちゃいますけどね。
DB上では普通にint型のIDENTITYでID作っちゃう。 アプリ側で受け取った数値に対して、桁が不足している分だけ0で 埋めて表示すればすむだけじゃないでしょうか。 こういうのってSQLにとってあんまり得意な処理ではないし。 DB側で正直に0000100とか持っとく必要を感じないんですけれど。 どうしてもそういう値の持ち方する必要があるなら、 ・IDENTITYでID生成 ・VARCHARに変換 ・ゼロパティング って処理をやればいいんじゃないでしょうか。トリガあたりで。 まあ前回書いたことと全く同じなんですけれど。 環境説明一切しないのは守秘義務にでも触れるんでしょうかね。 | ||||
|
投稿日時: 2008-02-24 10:30
数値として自動採番する列とは別に、ゼロパティングして返す計算列を用意するというのはいかが?
ただしSql Serverには、ゼロパティング関数が無いので、自分で作る必要があるけど
こんなストアドファンクションを用意しておけばいいんじゃないかしら。 #未確認なので、動くかどうかは知りません。また、もっといい方法がきっとあるでしょう | ||||
|
投稿日時: 2008-02-24 19:17
ナチュラルキーな社員コードならIDENTITYはやめとけ。
移行ではまると思われ… | ||||
|
投稿日時: 2008-02-27 21:43
返答が遅くなりもうしわけありませんでした。
皆様のおっしゃるとおりIDENTITYを使うことにします。 またよろしくお願いします。 |
1