2009年11月1日日曜日

SQLServer 「sp_rename」で列名変更

普段使用しているPCのSQLServerをセットアップした後、
課題で利用している販売管理B.mdbをインポートしました。
さらに追加でテーブルが必要だったので、
追加して行も作成して、さぁ「開発するぞ!」とSQLを実行すると、
なんとも列名でエラーなんですね、えぇ。

よくテーブルを見直してみると、表を作成する時に列名を間違えていたので、
ガックリしながら列名を変更しました。
またいつか列名を変更する時が来るだろうと、今の内にメモしておきます。

SQLServerでは、DBのあらゆるものをセットアップするために、
ストアドプロシージャが用意されています。
列名を変更する際には、その中の「sp_rename」を使用します。
sp_rename
  '社員マスタ.社員コード', 'SCODE', 'COLUMN'
これは、テーブル「社員マスタ」の列「社員コード」を、 「SCODE」へ変更するSQLになります。 「sp_rename」は、列名変更に限らず、 データベース名やオブジェクト名なども変更可能です。 詳しくは、Microsoftのリファレンスを参照して下さい。 sp_rename (Transact-SQL)
sp_rename
  '社員マスタ', 'SYAIN', 'OBJECT'

2009年10月13日火曜日

Accsess/MDB 日付リテラルまとめ

今日、授業内で使用することがあったのでメモ。

授業で使用しているDBにはAccess/MDB以外に、
Oracle、MySQLがあります。
Javaで作成したプログラム内でOracle用に作成したSQL文を、
MDBに転用しようとするとエラー発生。
ちなみに、その時のSQL文は以下のもの。
select * 
 from 社員マスタ 
 where 氏名 like '%浦%' 
   and 性別 = 0 
   and 作成日 between '2005/01/01' 
   and '2007/12/31'
最初は、列名に「[]」が無いせいなのかと思いましたが、反応無し。 仕方がないので調べてみると、MDB特有の日付リテラルに行き着きました。 MDBでのBETWEENについて ※リンク先を間違えていたので修正。 つまりは、MDBでは「'2005/01/01'」という書式が、 日付型でなく文字列型で扱われるということですね。 なので、「between a and b」など日付を扱う場合には、 「#2005/01/01#」とし、型変換する必要があります。 以下が処理成功時のSQL文です。
select * 
 from 社員マスタ 
 where 氏名 like '%浦%' 
   and 性別 = 0 
   and 作成日 between #2005/01/01# 
   and #2007/12/31#
正直分かりづらいなぁ、と。

2009年7月21日火曜日

Oracle 表に列を追加/列を削除

今日の授業内で使用したので、思い出した時に見られるようにメモ。

以下が参考にさせていただいたリンクです。
ORACLE/オラクルSQLリファレンス(ALTER TABLE)

Oracleで、すでに作成されている表に列を追加するSQL文。
ALTER TABLE 追加先表
 ADD (
  追加列1 varchar2(50),
  追加列2 number(6)
 )
削除する場合のSQL文。
ALTER TABLE 削除対象表
 DROP (
  削除列1, 削除列2
 )
さらに列名変更・列定義変更・表名変更も出来ますが、上のリンク先に詳しく書かれているので省略。 列操作後の、列順の並び替えは出来ないらしく、どうしても気になる場合には列順を新たにテーブルを作成して表を移すしかないようです。