2011-02-16 185 views
1

我需要在存儲過程開始時創建並填充臨時表。我需要以兩種方式之一填充表,具體取決於傳遞給存儲過程的參數是否爲NULL。使用CASE語句插入臨時表

下面的僞SQL是我想要做的。 fnSplit是一個自定義函數,它將','字符上的字符串分開並返回表([Value] nvarchar(4000))。

 DECLARE @ids varchar(max) 

    DECLARE @orders TABLE 
    ( 
     ProductID int, 
     BrandID int 
    ) 

    IF ISNULL(@ids) 
     INSERT INTO @orders 
     SELECT 
       PO.ProductID, 
       PO.BrandID 
     FROM dbo.ProductOrders PO 
    ELSE 
     INSERT INTO @orders 
     SELECT 
      PO.ProductID, 
      PO.BrandID 
     FROM fnSplit(@ids, ',') 
     JOIN dbo.ProductOrders PO on Value = PO.ID 
    END 

如何使用vaid SQL實現上述功能?也許使用CASE語句?請注意,存儲過程中的主邏輯位於該塊之後,並使用@orders表。

+0

只要改變`IF ISNULL(@ids)``到IF @ids IS NULL` – 2011-02-16 03:37:12

回答

2

你得八九不離十

IF @ids IS NULL 
BEGIN 
    INSERT INTO @orders 
    SELECT 
      PO.ProductID, 
      PO.BrandID 
    FROM dbo.ProductOrders PO 
END ELSE BEGIN 
    INSERT INTO @orders 
    SELECT 
     PO.ProductID, 
     PO.BrandID 
    FROM fnSplit(@ids, ',') 
    JOIN dbo.ProductOrders PO on Value = PO.ID 
END 
+0

+1'BEGIN .. END`不是強制性這裏兩個分支只有一個聲明。 – 2011-02-16 03:39:07