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








技術評論社の書籍ガイドへ
上巻:ISBN4-7741-0965-7

ウィンドウを閉じる


(株)日本技術ソフト開発 責任編集:堀川 明
MSDE FunClubに関するご意見・ご要望等ございましたら、 msdefun@horikawa.ne.jp までご連絡下さい。
HOME: http://www.horikawa.ne.jp/msde/


MSDE FunClubの運営は、マイクロソフト社とは一切の関係はありません