| MSDE FunClub |
|
最終更新日 : 2000/06/17 |
|
Microsoft Data Engine FunClub
|
Since 2000.06.17
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) |
|
【第2章88p 〜 90p掲載】 |
-- [SQL02_01.SQL]
-- SQLServer7.0 Transact-SQL言語
-- 日本技術ソフト開発 堀川 明
-- http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
-- 第1章で作成された テーブルやビュー表などを削除します
-- テーブルが4個、ビューが3個ありますので、ストアドプロシージャ
-- を使って削除します
--
-- これから操作する既定のデータベースを MySampleTest にします
USE MySampleTest
GO
-- 既存のプロシージャがあれば、それを削除する
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'Object_Delete' AND type = 'P ')
BEGIN
DROP PROCEDURE Object_Delete
PRINT 'Object_Delete プロシージャを削除しました'
END
GO
-- *******************************************************
-- 【オブジェクトの削除】
-- 指定されたオブジェクトを削除するプロシージャです
-- SQL01_07 を参照してください
-- [注意]
-- DROP TABLE 変数名 の形式は許されません
-- sp_executesql は、UNICODE 文字列が引数です
-- *******************************************************
CREATE PROCEDURE Object_Delete
@object_name varchar(20) -- 削除するオブジェクトの名前
-- 但し名前に空白文字は含まれていないものとする
-- 空白があると動的SQL文の実行に失敗する
AS
SET NOCOUNT ON
DECLARE @sqlstr nvarchar(80) -- SQL文を作成する(UNICODE文字列にする)
DECLARE @type varchar(2) -- オブジェクトのタイプです
-- 該当オブジェクトのタイプを取得
SELECT @type = (SELECT type FROM sysobjects WHERE name = @object_name )
-- オブジェクトが見つからないときは NULL となっている
IF( @type IS NOT NULL )
BEGIN
-- Unicode表現では、N は大文字にします。小文字 n はエラーです
SELECT @sqlstr = N'DROP ' +
CASE @type
WHEN 'U ' THEN N'TABLE ' -- テーブル
WHEN 'V ' THEN N'VIEW ' -- ビュー表
WHEN 'P ' THEN N'PROCEDURE ' -- プロシージャ
END
+ '[' + @object_name + ']' -- 名前の前後を[]で囲む
-- 名前が数字で始まっているものがある
PRINT @sqlstr
-- 該当オブジェクトを削除する
EXEC sp_executesql @sqlstr
END
ELSE
BEGIN
-- RAISERRORの第1引数に、+ 演算子などによる動的な文字列は作成できません
-- その場合は %s を利用して引数で与えてください
-- また[]記号は、書式解釈で使われますので使うことはできませんが、うまく工夫
-- すると出力できます。最初に空白を入れたら出力できました
-- 状態コード127 では、isql(osql)コマンドで実行しているときは、強制終了になります
RAISERROR(' [%s]が見つかりませんでした。このオブジェクトは削除できません' , 0 , 1,@object_name)
END
GO
-- 第1章で作成したビュー表オブジェクトを削除する
PRINT ''
EXEC Object_Delete 'VIEW_射影'
GO
EXEC Object_Delete '商品値段'
GO
EXEC Object_Delete '商品名情報'
GO
-- 第1章で作成したテーブルオブジェクトを削除する
EXEC Object_Delete '1998年商品情報'
GO
EXEC Object_Delete '1999年商品情報'
GO
EXEC Object_Delete '商品'
GO
EXEC Object_Delete '試験結果'
GO
PRINT '第1章で作成したオブジェクトを全て削除しました'
GO
-- 上で登録したプロシージャを削除します
--(データベースに保存しても、問題はありません)
DROP PROCEDURE Object_Delete
GO