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