MSDE FunClub 現在までのアクセスカウント数 最終更新日 : 2000/10/06
Microsoft Data Engine FunClub
Since 2000.10.06
SQLServer7.0/MSDE 完全トレーニングテキスト(下巻)
【第17章257p 〜 258p掲載】

-- [SQL17_01.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
--   Northwindデータベースをデタッチします
--   データベースの切り離し処理です
--   切り離したDBは、OSのCOPYコマンド等で
--   バックアップしてください
--
-- [注意]
--   このプログラムの実行は System Administrators
--   の権限が必要です
--

-- ( 件処理されました)のメッセージの表示を抑止します
    SET NOCOUNT ON
GO

    DECLARE @ret     int
    DECLARE @dbname  varchar(20)
    SELECT @dbname =  'Northwind'  -- 切り離すデータベースの名前
    PRINT ''                       -- 改行

    -- sysadminの権限所持チェック
    IF( IS_SRVROLEMEMBER('sysadmin') <> 1 )
        BEGIN
              RAISERROR('sysadmin権限が必要です。中止します',0,127)
              RETURN
        END

    -- データベースが存在しますか?
    IF NOT EXISTS( SELECT name FROM master..sysdatabases
                        WHERE( name = @dbname ) )
       BEGIN
              RAISERROR('%s データベースが存在しません。中止します',
                         0,127,@dbname)
              RETURN
       END


    -- データベースに対して接続がないことを確認します
    -- このチェックを省略してもよい
    -- sp_detach_dbの中で接続があれば実行されません
    -- sp_whoの結果セットを受け取ります
    CREATE TABLE #SP_WHO(
            spid  smallint   ,  --システム プロセス ID
          status  nchar(30)  ,  --プロセスの状態
        loginame  nchar(128) ,  --ログイン名
        hostname  nchar(128) ,  --コンピュータ名 
           blk     char(5)   ,  --ブロック中のプロセス 
         dbname   nchar(128) ,  --プロセスで使用されているデータベース
           cmd    nchar(16)     --SQL Server コマンド 
    )

    --sp_who を実行します
    INSERT INTO #SP_WHO EXEC sp_who

    --現在使用されているデータベースを調べる
    IF EXISTS ( SELECT dbname FROM #SP_WHO WHERE( dbname = @dbname ) )
      BEGIN
            DROP TABLE #SP_WHO
            RAISERROR('%s データベースは現在使用中です。中止します',0,127,@dbname)
            RETURN
      END

    --一時テーブルを削除します
    DROP TABLE #SP_WHO


    --*****************************
    --  データベースを切り離します
    --*****************************
    EXEC sp_detach_db @dbname
    PRINT ''
    RAISERROR('%s データベースを切り離しました',0,1,@dbname)
    RAISERROR('このデータベースのファイルをバックアップすることができます',0,1)
GO
技術評論社の書籍ガイドへ
下巻:ISBN4-7741-0966-5

ウィンドウを閉じる


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


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