| MSDE FunClub |
|
最終更新日 : 2000/08/11 |
|
Microsoft Data Engine FunClub
|
Since 2000.08.11
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) |
|
【第4章302p 〜 304p掲載】 |
-- [SQL04_12.SQL]
-- SQLServer7.0 Transact-SQL言語
-- 日本技術ソフト開発 堀川 明
-- http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
-- ストアドプロシージャの結果セットを受け取る例題です
-- 結果セットは、ストアドプロシージャ内の一時テーブル
-- に作成します
--
-- システム管理者saでログインしてください
IF( SUSER_NAME() <> 'sa' )
BEGIN
PRINT 'システム管理者sa でログインしてください'
RAISERROR('やり直してください',0,127)
RETURN
END
GO
-- カレントデータベースを設定する
USE [ストアドテスト用]
GO
-- (何件処理しました のメッセージを抑制する
SET NOCOUNT ON
GO
-- **********************************************************
-- データベースにログイン/ユーザが登録されているかどうか調査する
-- 戻り値=0 正常終了 =1 検索失敗(未登録)
-- **********************************************************
CREATE PROCEDURE #TMP_DBUSERCHECK
@LOGIN_NM varchar(40) OUTPUT , -- ログイン名による調査
@USER_NM varchar(40) OUTPUT -- ユーザ名による調査
AS
-- 一時テーブルを作成する
-- テーブルは sp_helpuser ストアドプロシージャの結果セットを受け取る
CREATE TABLE #TMP_TBL (
UserName sysname,
GroupName sysname,
LoginName sysname,
DefDBName sysname,
UserID smallint,
SuserID smallint )
-- sp_helpuser を実行する
INSERT INTO #TMP_TBL EXEC sp_helpuser
-- ログイン名による調査ですか?
IF (@LOGIN_NM IS NOT NULL)
BEGIN
-- ログイン名に対応したユーザ名を探す
SELECT @USER_NM = ''
SELECT @USER_NM = UserName
FROM #TMP_TBL WHERE (LoginName = @LOGIN_NM)
IF (@USER_NM <> '' ) RETURN 0 --検索成功です
RETURN 1 -- 検索失敗です
END
ELSE
-- ユーザ名による調査です
BEGIN
SELECT @LOGIN_NM = ''
SELECT @LOGIN_NM = LoginName
FROM #TMP_TBL WHERE ( UserName = @USER_NM )
IF (@LOGIN_NM <> '' ) RETURN 0 --検索成功です
RETURN 1 -- 検索失敗です
END
GO
-- ********************************************
-- ログイン名に対応するユーザ名の調査を行う
-- ********************************************
DECLARE @LNM varchar(40) , @UNM varchar(40)
DECLARE @RET int
PRINT ''
PRINT 'カレントデータベース = ' + DB_NAME()
EXEC @RET = #TMP_DBUSERCHECK 'A' , @UNM OUTPUT
IF @RET = 0 PRINT 'LOGIN[A] = USER[' + @UNM + ']'
EXEC @RET = #TMP_DBUSERCHECK 'B' , @UNM OUTPUT
IF @RET = 0 PRINT 'LOGIN[B] = USER[' + @UNM + ']'
EXEC @RET = #TMP_DBUSERCHECK 'C' , @UNM OUTPUT
IF @RET = 0 PRINT 'LOGIN[C] = USER[' + @UNM + ']'
EXEC @RET = #TMP_DBUSERCHECK 'D' , @UNM OUTPUT
IF @RET = 1 PRINT 'LOGIN[D] = USER[対応するユーザは存在しません]'
GO
-- ********************************************
-- ユーザ名に対応するログイン名の調査を行う
-- ********************************************
DECLARE @LNM varchar(40) , @UNM varchar(40)
DECLARE @RET int
PRINT ''
SELECT @LNM = NULL
EXEC @RET = #TMP_DBUSERCHECK @LNM OUTPUT , 'USER_A'
IF @RET = 0 PRINT 'USER[USER_A] = LOGIN[' + @LNM + ']'
SELECT @LNM = NULL
EXEC @RET = #TMP_DBUSERCHECK @LNM OUTPUT , 'USER_B'
IF @RET = 0 PRINT 'USER[USER_B] = LOGIN[' + @LNM + ']'
SELECT @LNM = NULL
EXEC @RET = #TMP_DBUSERCHECK @LNM OUTPUT , 'USER_C'
IF @RET = 0 PRINT 'USER[USER_C] = LOGIN[' + @LNM + ']'
SELECT @LNM = NULL
EXEC @RET = #TMP_DBUSERCHECK @LNM OUTPUT , 'USER_D'
IF @RET = 1 PRINT 'USER[USER_D] = LOGIN[対応するログインが存在しません]'
GO
-- ローカル一時ストアドプロシージャを削除する
DROP PROC #TMP_DBUSERCHECK
GO