MSDE FunClub | 最終更新日 : 2000/06/17 | |
Microsoft Data Engine FunClub |
|
|
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