2014-12-05 18 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