使用CASE语句插入临时表

时间:2011-02-16 03:28:34

标签: sql sql-server-2008

我需要在存储过程的开头创建并填充临时表。我需要以两种方式之一填充表,具体取决于传递给存储过程的参数是否为NULL。

以下伪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表。

1 个答案:

答案 0 :(得分: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