我需要在存储过程的开头创建并填充临时表。我需要以两种方式之一填充表,具体取决于传递给存储过程的参数是否为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表。
答案 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