| 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