Identity属性フィールドの桁数拡張方法
Identity属性フィールドの桁数拡張方法
0.改訂履歴
1.はじめに
このドキュメントでは,IDENTITY属性を持つテーブルを操作するためのノウハウを1例を挙げて紹介するものである.
なお,使用しているSybaseは,RedHat Linux 7.2上で稼働しているSybase SQL Server
11.0.3.3である.
新しいバージョンのSybase ASEでは,DDLでalter table modifyを実行する事で桁数を増やす事ができるが,古いバージョンでは実行できないので,この手順がある.
今回の用途以外にも,identityを利用するテーブルのデータを操作する時に応用できると考えている.
2.テストしてみる
1> create table TEST_TABLE1
2> (
3> aa numeric(10,0) identity,
4> bb char(10)
5> )
6> go
1>
|
- Identity項目が入っている.
- キーは付いていない.
- 作成したテーブルに,データを入れる.
1> insert into TEST_TABLE1 values("aa")
2> insert into TEST_TABLE1 values("bb")
3> insert into TEST_TABLE1 values("cc")
4> go
(3 row affected)
1> select * from TEST_TABLE1
2> go
aa bb
------------- ----------
1 aa
2 bb
3 cc
(3 rows affected)
1>
|
- ここでは3件のデータを挿入して,その内容を確認している.
- 2件目のデータを消して,確認する.
1> delete TEST_TABLE1 where aa=2
2> go
(1 row affected)
1> select * from TEST_TABLE1
2> go
aa bb
------------- ----------
1 aa
3 cc
(2 rows affected)
1>
|
- Identity属性を持つフィールドの桁数を拡張したテーブルを作成する.
- TEST_TABLE1は10桁で定義しているが,今回は12桁に変更.
1> create table TEST_TABLE2
2> (
3> ddd numeric(12,0) identity,
4> eee char(10)
5> )
6> go
1>
|
- insert intoを使って,TEST_TABLE1→TEST_TABLE2にデータを複写する.
- この時,identity_insertを設定しておいて,連番の自動発行を停止しておく.
1> set identity_insert TEST_TABLE2 on
2> go
1> insert TEST_TABLE2 ( ddd,eee) select aa,bb from TEST_TABLE1
2> go
1>
|
- この時,複写元・先のテーブルでは,フィールド名を省略できない.
- コピーされたほうのテーブルTEST_TABLE2のデータを確認してみる.
1> select * from TEST_TABLE2
2> go
ddd eee
--------------- ----------
1 aa
3 cc
1>
|
- TEST_TABLE1と同じ内容だとわかる.
- コピーされたテーブルにデータをINSERTしてみる.
- この時,identity_insertを解除しておいて,連番の自動発行する.
1> set identity_insert TEST_TABLE2 off
2> insert into TEST_TABLE2 values("PowerBook")
3> go
1> select * from TEST_TABLE2
2> go
ddd eee
--------------- ----------
1 aa
3 cc
4 PowerBook
1>
|