MSDE FunClub | 最終更新日 : 2000/08/08 | |
Microsoft Data Engine FunClub |
|
|
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