2017-01-22 9 views
0

Microsoft SQL Server Management Studioでストアドプロシージャを作成して、入力パラメータを使用して特定の割合でテーブルの価格を上げる必要があります。プロシージャにCategoryID(@CategoryID)のユーザー入力パラメータが必要です。カテゴリID 1を入力すると、ProductsテーブルのUnitPriceが10%(UnitPrice * 1.1)増加します。 CategoryID 2を入力すると、CategoryID4などで15%と7%増加します。他のカテゴリでは、UnitPriceは同じままになります。私は人気のNorthwindサンプルデータベースを使用しています。Productsテーブルの製品価格を引き上げるユーザー入力パラメーターを作成する方法

USE [Northwind]; 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE usp_IncreasePrices_test2 
(
@CategoryID int 
) 
RETURNS int 
AS 
BEGIN 
DECLARE @CategoryID int 
SELECT @CategoryID = (dbo.OrderDetails[UnitPrice]*1.1) 

これは私がこれまでのところ、私は任意のヘルプは非常に

+0

ヒント: 'UPDATE'。 –

答えて

0

非常に奇妙なロジックをいただければ幸いですけれども、それはおそらく間違っている知っているものです、とにかくあなたはこのように、この何かをするだろう...

CREATE PROCEDURE usp_IncreasePrices_test2 
    @CategoryID INT = NULL 
AS 
BEGIN 
    SET NOCOUNT ON; 
    Declare @PriceUp DECIMAL(5,2); 

SET @PriceUp = CASE 
        WHEN @CategoryID = 1 THEN 1.10 
        WHEN @CategoryID = 2 THEN 1.15 
        WHEN @CategoryID = 4 THEN 1.07 
        ELSE 1.00 
        END 

    UPDATE dbo.Products 
    SET UnitPrice = CAST(UnitPrice * @PriceUp AS DECIMAL(5,2)) 
    WHERE Categoryid = @CategoryID 

END 
+0

ヒント 'BEGIN..END'は、ほとんどの人がそう思っていることをしません。それらはゼロ効果で削除することができます。ストアドプロシージャの終了を識別する唯一のものは、 'GO'またはスクリプトの終わりです。 –

+0

@CraigYoung私は 'BEGIN ... END'の使い方を理解していて、決してバッチセパレータとして使用しません。これは、コードブロックを分割するためにのみ使用されます。また、よりクリーンで見やすくなります。 –

+0

私はストアドプロシージャ(ここで使われている)の中の 'BEGIN..END'についてのあなたの理解に疑問を呈していません。知らない人に予期せぬ驚きの意識を高めようとするだけです。あなたが "_aesthetically pleasing_"のように "読みやすい"と解釈すれば、私は同意する、それはよりよく見える。しかし、「正しく理解しています** **」と解釈すると、このコードは簡単に誤解されます。 'END'はprocを終了させるようです。だから、誰かが 'END'の後に' SELECT'を追加してテーブルのデータをチェックするかもしれません。 _that_スクリプトを実行し、procを 'SELECT'と呼ぶたびに非常に不愉快なことに驚いてください。 –

関連する問題