| MSDE FunClub | 
    
         
     | 
    
         最終更新日 : 2000/08/11 | 
    | 
            Microsoft Data Engine FunClub
     | 
   
            Since 2000.08.11
     | 
 
    | 
          SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) | 
    | 
          【第4章292p 〜 293p掲載】 | 
 
-- [SQL04_09.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、ストアドプロシージャの内部で引数の値を
-- 書き換えても呼び出し元には反映しない誤った例です
-- ストアドプロシージャの引数宣言では、OUTPUTキーワードを使います
--
-- カレントデータベースを MySampleTest にする
    USE MySampleTest
GO
-- ( 件処理されました)のメッセージを抑止する
    SET NOCOUNT ON
GO
-- ***************
--   既存の削除
-- ***************
    IF EXISTS (SELECT name FROM sysobjects
                   WHERE name = '合計計算' AND type = 'P ')  
       BEGIN
           DROP PROC  合計計算
       END
GO
-- ************************
--   [合計計算]の登録
-- ************************
    -- Sum = 1+2+3+4+ ... + End の計算を行います
    CREATE PROCEDURE 合計計算
                 @End  int  = 10 , 
                 @Sum  int OUTPUT    -- OUTPUTキーワードを忘れずに!!
AS
    DECLARE @I INT
    SELECT @Sum = 0 , 
           @I   = 1
    WHILE (@I <= @End)
       BEGIN     
          SELECT @Sum = @Sum + @I
          SELECT @I = @I + 1
       END
    RETURN @Sum
GO
-- ********************************
--        プログラムの実行
--        (誤った例です)
-- ********************************
    DECLARE @Total int
    SELECT @Total = 0
    EXEC 合計計算 10 , @Total
    PRINT ''
    PRINT 'これはストアドプロシージャの呼び出し側で誤った例です'
    PRINT '1+2+3+ ... + 10 = ' + cast(@Total as varchar)
    PRINT '合計値は正しいですか?'
GO