2013-02-24 30 views
0

我有一个简单的表单,允许用户为其业务创建服务。他们还可以使用相同的形式为该服务附加交易。SQL插入语句 - 如何指定单个字段的条件

实施例:

  • 服务名称
  • 服务价格
  • 服务描述
  • 激活交易
  • 交易价格

的是被隐藏的两个日期字段:

  1. ServiceCreated_Date
  2. DealCreated_Date

我的问题是,因为这是形式的“插入”,而不是更新什么是纳入在DealCreated_Date条件的正确方法?

例如:

INSERT INTO MyTable 
(
    ServiceTitle 
    ,ServicePrice 
    ,ServiceDescription 
    ,ServiceCreated_Date 
    ,ActivateDeal 
    ,DealPrice 
    ,DealCreated_Date 
) VALUES 
(
    @ServiceTitle 
    ,@ServicePrice 
    ,@ServiceDescription 
    ,GETDATE() // For ServiceCreated_Date 
    ,@ActivateDeal 
    ,@DealPrice 
    ,??????? 

所以基本上,我想用GETDATE()为DealCreated_Date场,但只有当ActivateDeal为TRUE(1)

是否有一个简单的方法来做到这一点?

谢谢你的帮助。

回答

2

我认为你只是想用一个CASE语句:

INSERT INTO MyTable 
(
    ServiceTitle 
    ,ServicePrice 
    ,ServiceDescription 
    ,ServiceCreated_Date 
    ,ActivateDeal 
    ,DealPrice 
    ,DealCreated_Date 
) VALUES 
(
    @ServiceTitle 
    ,@ServicePrice 
    ,@ServiceDescription 
    ,GETDATE() // For ServiceCreated_Date 
    ,@ActivateDeal 
    ,@DealPrice 
    ,CASE WHEN @ActivateDeal THEN getDate() END 
) 

这应该插入取决于@ActivateDeal的值当前日期或NULL。根据数据类型的不同,您可能需要使用CASE WHEN @ActivateDeal = 1。

SQL Fiddle Demo

+0

感谢您的快速响应。正如你所提到的,我不得不追加1,但这个工作很完美。 – user1447679 2013-02-24 23:55:55

+0

@ user1447679 - np,很高兴帮助!我想你需要这样做:)最好的问候。 – sgeddes 2013-02-24 23:59:16

+0

再次嗨!我敢打赌,你可以预测到下一个问题......当业务更新他们的服务时,是否有一种处理同样事情的好方法?例如,编辑表单......当他们点击“编辑”时。有没有一种方法可以首先检查是否存在这种不确定性,以及它是否已经存在?例如,在UPDATE语句中,如果它首先检查ActivateDeal是否为TRUE,然后检查DealCreated_Date是否为NULL,并且只在新的日期不为空时插入新的日期。在这种情况下,我甚至希望通过检查其他交易字段来执行同样的检查来创建“DealUpdated_Date” – user1447679 2013-02-25 00:33:23