| 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