1

这个问题将是接受多个 Id 值的 T-SQL 存储过程中最后一个答案的附录

我将一些 id 列表作为参数传递给存储过程。如果没有发送数据,它们中的每一个都默认为 null。例如,我希望我的存储过程返回 id 为 1、2、5、7、20 的食品。我还发送了一份颜色 ID 和生产位置 ID 列表。我正在传递这些 id 的逗号分隔列表。与上面提到的问题中的最后一个答案类似,我使用每个参数的数据创建了一个临时表。然后我想要一个 select 语句,如下所示:

SELECT * FROM Candies 
INNER JOIN #TempColors 
    ON Candies.ColorsID = #TempColors.ColorID 
INNER JOIN Locations 
    ON Candies.LocationID = Locations.LocationID

这仅在填充参数并且 LEFT OUTER JOINS 无法正确过滤时才有效。在接受 null 作为有效参数的同时进行过滤的方法是什么?

4

1 回答 1

1

你可以使用

some join condition OR @param IS NULL

在您的加入中,如果提供了 null ,它将返回所有结果 - 尽管据我所知,您没有指定传递 null 时想要的行为

(当我说参数时,我的意思是临时表列在我的手机上执行此操作,这并不容易;))

编辑:

这个对我有用:

http://sqlfiddle.com/#!3/c7e85/26

例如

-- Assume this is your values string which is populating the table
DECLARE @Values varchar(50)

-- Your code to populate the table here: assume the string is NULL when no values are passed
INSERT INTO #TempColors BLAH BLAH...

-- Select statement
SELECT * FROM Candies  
    LEFT JOIN #TempColors  
        ON Candies.ColorsID = #TempColors.ColorID
WHERE 1 = CASE 
              WHEN Candies.ColorsID IS NULL AND @Values IS NULL THEN 1
              WHEN Candies.ColorsID IS NOT NULL AND @Values IS NOT NULL THEN 1
              ELSE 0
          END

这样,将使用 NON-NULL 参数过滤掉 NULL,但保留 NULL 参数

于 2012-07-09T19:50:51.507 回答