2011-02-16 64 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