SQL Server:存储过程挑战

时间:2012-09-24 02:16:55

标签: c# sql-server-2008 stored-procedures

以下是场景:我在SQL Server 2008中有一个SunflowerSeeds表。

CREATE TABLE [dbo].[SunflowerSeeds](
    [Color] [nvarchar](50) NULL,
    [SeedType] [nvarchar](50) NULL,
    [Price] float NULL
)

为简单起见,我没有插入长长的数据列表。

表格中的数据插入如下:

Insert into [dbo].[SunflowerSeeds] (Color, SeedType, Price)
SELECT 'Yellow', 'Dwarf', 20
UNION ALL
SELECT 'Brown', 'Garden', 30
UNION ALL
SELECT 'Red', 'Garden', 35

现在我已经提供了各种可以提高种子价格的矩阵。

  1. Polenless(是/否):如果是,则将价格提高10%
  2. 高度(> 13“):如果是,则将价格提高8%
  3. 有机(是/否):如果是,请将价格提高15%
  4. 生命周期(年度 - 是/否):如果是,则将价格提高12%
  5. 每个数据插入行对上面列出的每个矩阵可以具有YES或NO值。我需要提出一个流程来根据Price表中每个种子的SunFlowerseeds返回新价格,并将矩阵组合纳入/ c。

    例如,如果黄矮星是无生命的,高度> 13“,有机是,并且具有年度生命周期,然后新价格必须计算为

    10% + 8%+15%+12% = 45% = 1+ 0.45= 1.45 
    

    然后新价格为:1.45 * Original Price= 1.45*20 = 29

    同样适用于其他组合。

    我正在考虑编写一个SQL Server存储过程,以便稍后可以在我的C#代码中调用它。存储过程的i / p参数为ColorSeedType。有了这两个参数,我就可以得到Price

    挑战在于如何使用适用的矩阵组合计算每个种子的新Price - Polenless,height,Organic,LifeCycle。任何人都可以指出我这样做的正确方法。请帮帮我。 TIA。

1 个答案:

答案 0 :(得分:2)

假设向日葵种子中颜色和种子类型的组合是独特的:

CREATE PROCEDURE UpdatePrice
    @Polenless BIT,
    @Height BIT,
    @Organic BIT,
    @Lifecycle BIT,
    @color NVARCHAR(50),
    @seedType NVARCHAR(50)

AS
BEGIN
   UPDATE SunflowerSeeds
   SET Price = Price +  
                        ((Price * 0.1) * @Polenless)+
                        ((Price * 0.08) * @Height)+
                        ((Price * 0.15) * @Organic)+
                        ((Price * 0.12) * @Lifecycle)
    WHERE Color = @color  AND SeedType = @seedType

END
GO

此外,您可以使用int类型的按位标志,而不是@Polenless,@ Height,@ Organic,@ Lifecycle。