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