MSDE FunClub 現在までのアクセスカウント数 最終更新日 : 2000/08/08
Microsoft Data Engine FunClub
Since 2000.08.08
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻)
【第3章213p 〜 215p掲載】

-- [SQL03_01.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
--   ローカル変数とSELECT文の使い方の例題です
--   ローカル一時テーブルも使います
--

-- ( 件処理されました)の表示を抑制する
    SET NOCOUNT ON
GO

-- すでに同じ名前の[ローカル一時テーブル]がありますか?
-- SQLプログラム開発中のミスで、[ローカル一時テーブル]が残る場合があります
-- 存在していれば、それを削除します
-- ローカル一時テーブルのチェックは tempdbを使います
-- またnameではなく、object_id で比較します

    IF EXISTS (SELECT name FROM tempdb..sysobjects
                    WHERE id = object_id('tempdb..#TMP_TEST') AND type = 'U ')  
       BEGIN
         PRINT 'ローカル一時テーブルを削除します'
         DROP TABLE #TMP_TEST
       END
GO

-- ローカル一時テーブルと見本データの登録
    CREATE TABLE #TMP_TEST ( id  int , id2  varchar(10) )
    INSERT INTO #TMP_TEST VALUES(  1 , 'THERE' )
    INSERT INTO #TMP_TEST VALUES(  2 , 'HERE'  )
GO

-- ローカ変数の使用例
    DECLARE @Dat  int , @Dat2 varchar(10)

    PRINT '' --改行を行う

    -- 宣言直後はNULL値のはず
    IF (@Dat IS NULL)  PRINT '宣言直後は @Dat 変数は NULL値です'

    -- 普通の数字代入はSetでもできます
    Set @Dat = 10
    IF (@Dat = 10 )  PRINT 'Set @Dat = 10 の命令を実行しました'

    -- SELECT文による代入
    SET @Dat = @Dat + 10
    IF (@Dat = 20 )  PRINT 'SELECT @Dat = @Dat + 10 の命令を実行しました'
    PRINT '現在の@Dat変数の値 = ' + CAST(@Dat AS varchar) + ' です'

    -- 列選択による代入(検索が失敗すると値が保存される)
    PRINT ''
    PRINT 'レコードの列代入の実行。代入前の現在値 = ' + CAST(@Dat AS varchar) + 'です'

    SELECT  @Dat = id  FROM  #TMP_TEST  WHERE( id2='NOW')

    IF (@Dat = 20 ) PRINT '検索処理が失敗しました。代入失敗後の値 = ' + 
                              CAST(@Dat As varchar) + 'です'

    PRINT '[SELECT @変数=列 FROM 表 WHERE 条件] では、検索失敗時は値が保存されます'


    -- サブクエリーによる値の代入(検索が失敗するとNULL値となる)
    PRINT ''
    PRINT 'サブクエリーの結果代入の実行。代入前の現在値 = ' +
            CAST(@Dat AS varchar) + 'です'

    SELECT @Dat = (SELECT id FROM  #TMP_TEST  WHERE(id2='NOW') )

    IF (@Dat IS NULL ) 
            PRINT '検索処理が失敗しました。代入失敗後の値は NULL値です'


    -- 列選択による代入
    PRINT ''

    SELECT  @Dat = id , @Dat2 = id2  FROM  #TMP_TEST WHERE( id2='THERE' )

    IF ((@Dat = 1 ) AND (@Dat2 = 'THERE'))
         PRINT '[SELECT @変数=列 FROM 表 WHERE 条件]の代入処理が正常終了'


    -- サブクエリーによる値の代入
    PRINT ''

    SELECT @Dat = (SELECT id FROM  #TMP_TEST  WHERE(id2='HERE') )

    IF (@Dat = 2 )
        PRINT '[SELECT @変数=(SELECT 列 FROM 表 WHERE 条件)]のサブクエリ代入は正常終了'
GO


-- 表に含まれるレコード総数の計算
    DECLARE @Cnt int

    SELECT  @Cnt = Count(*) FROM #TMP_TEST

    PRINT ''
    PRINT 'COUNT関数の利用:テーブルに含まれるレコード件数='
               + CAST(@Cnt AS varchar) + ' です'
GO

-- ローカル一時テーブルを削除する
    DROP TABLE #TMP_TEST
GO




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

ウィンドウを閉じる


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


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