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




技術評論社の書籍ガイドへ
上巻:ISBN4-7741-0965-7

ウィンドウを閉じる


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


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