ビューおよびストアドプロシージャの作成
上田君は前回と同様に、ビュー、ストアドプロシージャ、画面の順に作成することにしました。
ビューは、受注ヘッダー情報を格納する「受注トラン」と、受注明細情報を格納する「受注明細トラン」を作成します。前回、山下課長が使用していたダミービュー生成マクロを使用することで、簡単に作成することができました。
USE [czsample] GO /****** オブジェクト: View [dbo].[vi受注トラン] スクリプト日付: 09/03/2008 15:54:00 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE VIEW [dbo].[vi受注トラン] AS SELECT 10005318 AS 受注コード, CAST('2008/8/21' AS datetime) AS 受注日, CAST('2008/9/1' AS datetime) AS 納期, 100024 AS 納品先, 100002 AS 請求先, CAST('2008/9/1' AS datetime) AS 請求日, 100002 AS 出荷先
USE [czsample] GO /****** オブジェクト: View [dbo].[vi受注明細トラン] スクリプト日付: 09/03/2008 15:55:20 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE VIEW [dbo].[vi受注明細トラン] AS SELECT 10000001 AS 商品コード, 'ダイニングテーブル4人用1500×700×900ホワイト' AS 商品名, 5 AS 数量, 100000 AS 定価, 80000 AS 単価, 400000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000002 AS 商品コード, 'ダイニングテーブル6人用1700×850×900ホワイト' AS 商品名, 3 AS 数量, 100000 AS 定価, 70000 AS 単価, 210000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000003 AS 商品コード, 'チェアー' AS 商品名, 20 AS 数量, 30000 AS 定価, 21000 AS 単価, 420000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000004 AS 商品コード, 'ベッド<シングル>1900×800×500' AS 商品名, 4 AS 数量, 100000 AS 定価, 70000 AS 単価, 280000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000005 AS 商品コード, 'ベッド<セミダブル>2100×1200×400' AS 商品名, 4 AS 数量, 150000 AS 定価, 120000 AS 単価, 480000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000006 AS 商品コード, 'ベッド<ダブル>2100×1600×400' AS 商品名, 2 AS 数量, 200000 AS 定価, 160000 AS 単価, 320000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000007 AS 商品コード, 'タンス' AS 商品名, 10 AS 数量, 60000 AS 定価, 42000 AS 単価, 420000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000008 AS 商品コード, 'ソファー2人用ベージュ' AS 商品名, 15 AS 数量, 40000 AS 定価, 28000 AS 単価, 420000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000009 AS 商品コード, 'ソファー3人用ベージュ' AS 商品名, 10 AS 数量, 60000 AS 定価, 42000 AS 単価, 420000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000010 AS 商品コード, 'ダイニングテーブル4人用1500×700×900ブラック' AS 商品名, 5 AS 数量, 100000 AS 定価, 80000 AS 単価, 400000 AS 小計, '限定商品' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000011 AS 商品コード, 'ダイニングテーブル6人用1700×850×900ブラック' AS 商品名, 3 AS 数量, 100000 AS 定価, 70000 AS 単価, 210000 AS 小計, '限定商品' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000012 AS 商品コード, 'カーテン<76>2000×1500' AS 商品名, 2 AS 数量, 30000 AS 定価, 24000 AS 単価, 48000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000013 AS 商品コード, 'カーテン<34>2000×1500' AS 商品名, 2 AS 数量, 20000 AS 定価, 14000 AS 単価, 28000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000014 AS 商品コード, 'カーテン<19>2000×1500' AS 商品名, 4 AS 数量, 15000 AS 定価, 12000 AS 単価, 48000 AS 小計, '' AS 備考, 10005318 AS 受注コード
作成するストアドプロシージャは、先程作成したビューを抽出するためのものと、受注明細トランにインサートするためのストアドプロシージャです。
インサートするストアドプロシージャは、今回はビューを使用しているため実際に追加は行わず、入力チェックだけを行い、チェックが通ったか否かを返すものにします。
USE [czsample] GO /****** オブジェクト: StoredProcedure [dbo].[prHeader] スクリプト日付: 09/03/2008 15:58:26 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- 受注ヘッダ情報を検索します。 -- 引数:@受注コード -- CREATE PROCEDURE [dbo].[prHeader] ( @受注コード int ) AS SET NOCOUNT ON -- 名称に一致する受注ヘッダ情報を抽出し、結果のレコードを返します。 SELECT j.受注コード, j.受注日, j.納期, j.納品先, j.請求先, j.請求日, j.出荷先 FROM dbo.vi受注トラン AS j WHERE 受注コード = @受注コード RETURN
USE [czsample] GO /****** オブジェクト: StoredProcedure [dbo].[prDetail] スクリプト日付: 09/03/2008 15:58:43 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- 受注明細情報を検索します。 -- 引数:@受注コード -- CREATE PROCEDURE [dbo].[prDetail] ( @受注コード int ) AS SET NOCOUNT ON -- 名称に一致する受注明細情報を抽出し、結果のレコードを返します。 SELECT 商品コード, 商品名, 数量, 定価, 単価, 小計, 備考, 受注コード FROM dbo.vi受注明細トラン WHERE 受注コード = @受注コード RETURN
USE [czsample] GO /****** オブジェクト: StoredProcedure [dbo].[prInsDetail] スクリプト日付: 09/03/2008 15:59:10 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- 明細を追加します。※実際は必須入力チェックしか行わない。 -- 引数:@商品コード、@商品名、@数量、@定価、@単価、@小計、@備考、@受注コード -- CREATE PROCEDURE [dbo].[prInsDetail] ( @商品コード int ,@商品名 varchar(100) ,@数量 int ,@定価 int ,@単価 int ,@小計 int ,@備考 varchar(100) ,@受注コード int ) AS SET NOCOUNT ON SELECT 1 -- 入力した値が不正な場合は0以外を返します RETURN (CASE WHEN @商品コード >= 10000000 THEN 0 ELSE 1 END) + (CASE @商品名 WHEN '' THEN 1 ELSE 0 END)
また、得意先コードを入力したときに、得意先名を自動的に表示させるためのストアドプロシージャも作成しておきます。
USE [czsample] GO /****** オブジェクト: StoredProcedure [dbo].[pr得意先取得] スクリプト日付: 09/03/2008 16:00:15 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- 得意先を取得します。 -- 引数:@得意先ID -- CREATE PROCEDURE [dbo].[pr得意先取得] ( @得意先ID int ) AS SET NOCOUNT ON -- 名称に一致する得意先を抽出し、結果のレコードを返します。 SELECT 得意先名 FROM dbo.vi得意先マスタ WHERE 得意先ID = @得意先ID RETURN