| MSDE FunClub |
|
最終更新日 : 2000/07/22 |
|
Microsoft Data Engine FunClub
|
Since 2000.07.22
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) |
|
【第2章129p 〜 131p掲載】 |
-- [更新系SQL文の基礎(例題2)EX2-02.SQL]
-- SQLServer7.0 Transact-SQL言語
-- 日本技術ソフト開発 堀川 明
-- http://www.horikawa.ne.jp/msde/
--
-- これから操作する既定のデータベースを MySampleTest にします
USE MySampleTest
GO
-- ( 件処理されました)の表示を抑制する
SET NOCOUNT ON
GO
-- [運送会社]テーブルの存在チェック
IF( ( object_id('運送会社') IS NULL ) OR
OBJECTPROPERTY( object_id('運送会社') , 'IsTable' ) = 0 )
BEGIN
PRINT '****Error!!****'
PRINT 'AccessのNorthwindデータベースの[運送会社]テーブルを使います'
PRINT '[運送会社]テーブルを転送してください'
RAISERROR( '[運送会社]テーブルが見つかりません',16,127)
RETURN
END
GO
-- ***********************************************************
-- [運送会社]テーブルの[運送コード]にオートナンバー型が設定
-- され、IDENTITY型になります。
-- この例題では、[運送コード]に明示的な数値代入を行いますので
-- IDENTITY型があるとよくありません。
-- IDENTITY型があるときはそれを削除したいのですが、残念ながら
-- ALTER TABLEの既存列に関するIDENTITY属性の削除ができません
-- しかたないので、次のような苦肉の策を取りました
-- 他に良い方法があるかなー?
-- ***********************************************************
IF( IDENT_SEED('運送会社') IS NOT NULL )
BEGIN
RAISERROR('IDENTITY列が設定されています',0,1) WITH NOWAIT
-- コピー先の一時テーブルの作成
CREATE TABLE #TMP_運送会社(
運送コード int ,
運送会社 varchar(40) ,
電話番号 varchar(24)
)
-- 既存テーブルのデータをコピーする
INSERT INTO #TMP_運送会社 SELECT * FROM 運送会社
-- 本物のテーブルを削除
DROP TABLE 運送会社
END
--テーブル削除を行ったので、それを反映させるため、バッチを区切る
--次の同じ名前のテーブル作成がうまく働かない
GO
-- 一時テーブルが存在するときは、処理を継続させる
IF( object_id('tempdb..#TMP_運送会社') IS NOT NULL )
BEGIN
RAISERROR('運送会社テーブルを作りなおします',0,1) WITH NOWAIT
-- 本物のテーブルを作りなおす
CREATE TABLE 運送会社(
運送コード int ,
運送会社 varchar(40) ,
電話番号 varchar(24)
)
-- レコードを元に戻す
INSERT INTO 運送会社 SELECT * FROM #TMP_運送会社
-- 一時テーブルを削除する
DROP TABLE #TMP_運送会社
END
GO
-- 例題2の解答です
-- 1レコードの登録
INSERT INTO 運送会社 VALUES( 10 , 'キツネウンユ' , '(03)111-1111' )
GO
-- 登録する列を明示する
INSERT INTO 運送会社(運送コード,運送会社,電話番号)
VALUES( 11 , 'キツネウンユ2' , '(03)111-2222' )
GO
-- 列名を明記すれば、順番を変えても良い
INSERT INTO 運送会社(電話番号 ,運送コード,運送会社)
VALUES( '(03)111-3333' , 12 , 'キツネウンユ3' )
GO
-- 列名を明記すれば、リストにない列はデフォルトとなる
-- 運送会社の列は、デフォルト値です
INSERT INTO 運送会社(運送コード,電話番号)
VALUES( 14 , '(03)111-4444')
GO
-- 次のDEFALUTキーワードを使うこともできます
INSERT INTO 運送会社(運送コード,運送会社,電話番号)
VALUES( 15 , DEFAULT , '(03)111-5555' )
GO
-- 次のNULLキーワードを使うこともできます
INSERT INTO 運送会社(運送コード,運送会社,電話番号)
VALUES( 16 , NULL , NULL )
GO
PRINT 'レコード挿入処理を行いました'
GO