- PR -

varchrで自動採番

1
投稿者投稿内容
ゆうじ
常連さん
会議室デビュー日: 2008/01/28
投稿数: 31
お住まい・勤務地: 東京都
投稿日時: 2008-02-23 11:00
いつもありがとうございます。
以前こちらの掲示板で自動採番の方法を教えていただいたのですが(IDENTITYを使用
したほうがよい)再度教えて下さい。
@社員IDを主キーとしてますが型がvarchrの7桁(例えばID100の社員でしたらIDの頭に0000をつけ0000110となります)でした。int型であればIDENTITYを使うのですが
・・。上記の型で自動採番をなんとかできませんでしょうか?
よろしくおねがいします。
OakBow
ベテラン
会議室デビュー日: 2007/09/15
投稿数: 51
投稿日時: 2008-02-23 13:15
桁数を指定したゼロパディングってのは、数値型じゃできないんじゃないかな。
だってそもそも数値じゃなくなるし。

データベース上で何とかしたいなら、普通にIDENTITYなカラムを作っておき、
そのカラムにゼロパティングしたVARCHARなカラムを別途作成ってあたりに
なるんでしょうか。
トリガ使っちゃってもいいかな?
RDBMSによっちゃ独自の機能で対応できる部分もあるかもですが。

そーゆーのはRDBMSじゃなくてアプリ側でやるもんじゃないかな、って気もしますけど。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 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/01/28
投稿数: 31
お住まい・勤務地: 東京都
投稿日時: 2008-02-24 01:05
引用:

indigo-xさんの書き込み (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か?)

参考になればと思います。


皆様書き込みありがとうございます。
A)元々のテーブルの仕様です
B)数字の7桁でIDを作成しなくてはいけないのです(0000を入れるためにvarcharです)
c)1〜9999999となり0000は7桁にあわせるためです。
よろしくお願いします。
OakBow
ベテラン
会議室デビュー日: 2007/09/15
投稿数: 51
投稿日時: 2008-02-24 02:14
私ならそのゼロパティングはアプリ側でやっちゃいますけどね。
DB上では普通にint型のIDENTITYでID作っちゃう。
アプリ側で受け取った数値に対して、桁が不足している分だけ0で
埋めて表示すればすむだけじゃないでしょうか。
こういうのってSQLにとってあんまり得意な処理ではないし。

DB側で正直に0000100とか持っとく必要を感じないんですけれど。

どうしてもそういう値の持ち方する必要があるなら、
・IDENTITYでID生成
・VARCHARに変換
・ゼロパティング
って処理をやればいいんじゃないでしょうか。トリガあたりで。
まあ前回書いたことと全く同じなんですけれど。

環境説明一切しないのは守秘義務にでも触れるんでしょうかね。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2008-02-24 10:30
数値として自動採番する列とは別に、ゼロパティングして返す計算列を用意するというのはいかが?

ただしSql Serverには、ゼロパティング関数が無いので、自分で作る必要があるけど
コード:
Right(Replicate('0', @maxLength) + str(社員番号, @maxLength), @maxLength)


こんなストアドファンクションを用意しておけばいいんじゃないかしら。
#未確認なので、動くかどうかは知りません。また、もっといい方法がきっとあるでしょう
ハニワ祭り
大ベテラン
会議室デビュー日: 2005/11/15
投稿数: 115
投稿日時: 2008-02-24 19:17
ナチュラルキーな社員コードならIDENTITYはやめとけ。
移行ではまると思われ…
ゆうじ
常連さん
会議室デビュー日: 2008/01/28
投稿数: 31
お住まい・勤務地: 東京都
投稿日時: 2008-02-27 21:43
返答が遅くなりもうしわけありませんでした。
皆様のおっしゃるとおりIDENTITYを使うことにします。
またよろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)