| MSDE FunClub |
|
最終更新日 : 2000/06/01 |
|
Microsoft Data Engine FunClub
|
Since 2000.06.01
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) |
|
【第1章49p 〜 51p掲載】 |
-- [SQL01_07.SQL]
-- SQLServer7.0 Transact-SQL言語
-- 日本技術ソフト開発 堀川 明
-- http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
-- [商品名情報]テーブル と [商品値段]テーブルを表示するビュー表を
-- 登録します
-- 表の結合処理で使われる基本になる表です
--
-- これから操作する既定のデータベースを MySampleTest にします
USE MySampleTest
GO
-- *********************************************
-- 一時ストアドプロシージャが登録済みですか?
-- 同じ名前が登録済みのときは、それを削除
-- *********************************************
-- tempdbのsysobjectsに、一時テーブルや一時プロシージャの名前が管理
IF EXISTS (SELECT name FROM tempdb.dbo.sysobjects
WHERE id = object_id('tempdb..#TMP_DELETE') AND type = 'P ')
BEGIN
PRINT '一時プロシージャを削除します'
DROP PROCEDURE #TMP_DELETE
END
GO
-- *****************************************************************************
-- 【一時ストアドプロシージャの登録】
-- 指定されたオブジェクトを削除する
-- 名前が#で始まるものは一時オブジェクトです。私のこの接続期間だけ、有効です
-- 勉強のため、一時オブジェクトを使いましたので、普通の名前に変更してもよい
-- [注意]
-- DROP TABLE 変数名 の形式は許されません
-- sp_executesql は、UNICODE 文字列が引数です
-- *****************************************************************************
CREATE PROCEDURE #TMP_DELETE
@OBJECT_NAME varchar(20) , -- 削除するオブジェクトの名前
@OBJECT_TYPE char(2) -- オブジェクトのタイプ
AS
DECLARE @SQLSTR nvarchar(80) -- SQL文を作成する(UNICODE文字列にする)
-- 該当オブジェクトの検索(存在しますか?)
IF EXISTS (SELECT name FROM sysobjects
WHERE name = @OBJECT_NAME AND type = @object_type )
BEGIN
IF @OBJECT_TYPE = 'U '
BEGIN
SELECT @SQLSTR = N'DROP TABLE ' + @OBJECT_NAME
EXEC sp_executesql @SQLSTR
PRINT ''
PRINT 'テーブル[' + @OBJECT_NAME + ']を削除しました'
END
ELSE IF @OBJECT_TYPE = 'V '
BEGIN
SELECT @SQLSTR = N'DROP VIEW ' + @OBJECT_NAME
EXEC sp_executesql @SQLSTR
PRINT ''
PRINT 'ビュー[' + @OBJECT_NAME + ']を削除しました'
END
ELSE IF @OBJECT_TYPE = 'P '
BEGIN
SELECT @SQLSTR = N'DROP PROCEDURE ' + @OBJECT_NAME
EXEC sp_executesql @SQLSTR
PRINT ''
PRINT 'プロシージャ[' + @OBJECT_NAME + ']を削除しました'
END
END
GO
-- **************************************
-- 既存のビュー表があれば、それを削除する
-- **************************************
EXEC #TMP_DELETE '商品名情報' , 'V '
EXEC #TMP_DELETE '商品値段' , 'V '
GO
-- ******************************
-- 新しく ビュー表 を登録します
-- ******************************
CREATE VIEW 商品名情報
AS
SELECT 商品.商品番号 ,
商品.商品名 ,
商品.商品型番
FROM 商品
WHERE 商品.商品番号 IN ( 'A001' , 'A003' , 'B001' )
-- このGOは1個のビュー表登録完了として必ず必要です
GO
PRINT ''
PRINT '[商品名情報] ビュー表を作成しました'
GO
CREATE VIEW 商品値段
AS
SELECT 商品.商品番号 ,
商品.売値 ,
商品.卸値
FROM 商品
WHERE 商品.商品番号 IN ( 'A001' , 'B001' , 'B002' )
-- このGOは1個のビュー表登録完了として必ず必要です
GO
PRINT ''
PRINT '[商品値段] ビュー表を作成しました'
GO
-- 自分が作成した一時プロシージャは最後に自分から掃除するとよい
DROP PROCEDURE #TMP_DELETE
GO