2014-12-05 67 views
0

我正在研究一个存储过程,如果第二个表有任何数据,则该存储过程应该使用来自另一个表Basket_TruckDelivery的信息更新表Order_TruckDelivery。每个表中有两列:intiddatetime列,名为TruckDeliveryDate。如果Basket_TruckDelivery有一个为当前购物篮ID存储的日期,则将该日期插入Order_TruckDelivery表中。防止为存储过程插入NULL值

眼下,INSERT会执行,无论是否有在Basket_TruckDelivery表什么,这导致在Order_TruckDeliveryTruckDelveryDate列NULL值。我想阻止这种情况发生,但我不完全确定如何。基本上,我只想执行INSERTOrder_TruckDelivery表中,如果Basket_TruckDelivery中的TruckDeliveryDate的值不为空或为空。

这是我迄今为止...我没有做什么工作,存储过程,所以我不知道我已经错过了....

ALTER PROCEDURE [dbo].[SaveTruckIntoOrder] 
    @BasketID INT, 
    @OrderID INT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    DECLARE 
     @TruckDeliveryDate DATETIME 

    IF(EXISTS(SELECT uidBasket FROM [Basket_TruckDelivery] WHERE [uidBasket] = @BasketID)) 
    BEGIN 
     SELECT 
      @TruckDeliveryDate = [TruckDeliveryDate] 
     FROM 
      [Basket_TruckDelivery] 
     WHERE 
      [uidBasket] = @BasketID 
    END 

    BEGIN 
     INSERT INTO [Order_TruckDelivery] ([uidOrder], [TruckDeliveryDate]) 
     VALUES (@OrderID, @TruckDeliveryDate) 
    END 
END 
+0

看来, SELECT和INSERT语句之间的END和BEGIN语句不应该在那里。因此,INSERT语句总是在运行。 – Rono 2014-12-05 21:03:57

+2

只需使用anotehr IF用于INSERT检查blahDATE不为NULL – Mihai 2014-12-05 21:04:24

+0

Mihai,这显然是我需要的一切......现在一切似乎都很顺利。 – 2014-12-05 21:17:02

回答

0
ALTER PROCEDURE [dbo].[SaveTruckIntoOrder] @BasketID INT 
    ,@OrderID INT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @TruckDeliveryDate DATETIME 

    IF (
      EXISTS (
       SELECT uidBasket 
       FROM [Basket_TruckDelivery] 
       WHERE [uidBasket] = @BasketID 
       ) 
      ) 
    BEGIN 
     SELECT @TruckDeliveryDate = [TruckDeliveryDate] 
     FROM [Basket_TruckDelivery] 
     WHERE [uidBasket] = @BasketID 
    END 

    IF (
      @TruckDeliveryDate IS NOT NULL 
      AND @TruckDeliveryDate != '' 
      ) 
    BEGIN 
     INSERT INTO [Order_TruckDelivery] (
      [uidOrder] 
      ,[TruckDeliveryDate] 
      ) 
     VALUES (
      @OrderID 
      ,@TruckDeliveryDate 
      ) 
    END 
END