| 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