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

-- [SQL01_20.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
--   固定長文字列と可変長文字列の違いを認識します
--

-- ( 件処理されました)のメッセージを抑止する
    SET NOCOUNT ON
GO

-- 作業用変数の宣言
-- 作業用変数はバッチ区間内だけ有効です(GOからGOの間)
    DECLARE @C     char(10)   -- 固定長文字列
    DECLARE @CV varchar(10)   -- 可変長文字列

    -- 固定長文字列変数に1文字の代入
    SELECT @C ='C'
    PRINT ''
    PRINT '   char 変数の値:[' + @C + ']' + ' LEN = ' + CAST(LEN(@C) AS char)   -- 空白が付加される

    -- 可変長文字列変数に1文字の代入
    SELECT @CV ='C'
    PRINT 'varchar 変数の値:[' + @CV + ']         ' + ' LEN = ' + CAST(LEN(@CV) AS char)
    PRINT ''

    -- 固定長変数の場合、文字列比較のときは後ろの空白が無視される
    IF NOT @C = 'C'          PRINT 'ERROR1'
    IF NOT @C = 'C '         PRINT 'ERROR2'
    IF NOT @C = 'C         ' PRINT 'ERROR3'
    IF NOT @C = @CV          PRINT 'ERROR4' 

    -- 可変長変数の場合も文字列比較のときは後ろの空白が無視される
    IF NOT @CV = 'C'          PRINT 'ERROR5'
    IF NOT @CV = 'C '         PRINT 'ERROR6'
    IF NOT @CV = 'C         ' PRINT 'ERROR7'
GO


-- 一時テーブルを作成します(名前の前に#が1個ある)
    CREATE TABLE #TMP_MYTABLE(
           C     char(10) ,      -- 固定長型
           CV varchar(10)        -- 可変長型
    )

    -- 一時テーブルにレコードを登録する
    --                                C       CV
    INSERT INTO #TMP_MYTABLE VALUES( '0'   , '1'   );
    INSERT INTO #TMP_MYTABLE VALUES( '2  ' , '3  ' );
GO

-- レコードを検索する。検索したレコードが存在すればEXISTSは真となる
-- LIKE 演算によって、文字列のパターン認識を行う場合、固定長と可変長の違いが出る
-- 固定長は文字列の後ろに空白が埋められる
    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE C   =  '0'   ) PRINT 'C    =  ''0''   検索OK-1'
    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE C   =  '0  ' ) PRINT 'C    =  ''0  '' 検索OK-2'
    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE C LIKE '0 '  ) PRINT 'C  LIKE ''0 ''  検索OK-3A'
    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE C LIKE '0  ' ) PRINT 'C  LIKE ''0  '' 検索OK-3B'
    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE C   =  '2'   ) PRINT 'C    =  ''2''   検索OK-4'
    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE C   =  '2  ' ) PRINT 'C    =  ''2  '' 検索OK-5'
    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE C LIKE '2  ' ) PRINT 'C  LIKE ''2  '' 検索OK-6'
    PRINT ''
GO

    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE CV   =  '1'   ) PRINT 'CV   =  ''1''   検索OK-1'
    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE CV   =  '1  ' ) PRINT 'CV   =  ''1  '' 検索OK-2'
    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE CV LIKE '1 '  ) PRINT 'CV LIKE ''1 ''  BAD!!'
    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE CV LIKE '1  ' ) PRINT 'CV LIKE ''1  '' BAD!!'
    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE CV   =  '3'   ) PRINT 'CV   =  ''3''   検索OK-4'
    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE CV   =  '3  ' ) PRINT 'CV   =  ''3  '' 検索OK-5'
    IF EXISTS( SELECT * FROM #TMP_MYTABLE WHERE CV LIKE '3  ' ) PRINT 'CV LIKE ''3  '' 検索OK-6'
    PRINT '可変長文字列に対して、 CV LIKE ''1 '' のように空白を入れると検索失敗です' 
    PRINT '固定長文字列の検索3A,3Bのパターンが失敗しています'
GO 


-- 上で作成した一時テーブルを削除する
    DROP TABLE #TMP_MYTABLE
GO







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

ウィンドウを閉じる


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


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