这个问题将成为T-SQL stored procedure that accepts multiple Id values
中最后一个答案的附录我将一些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作为有效参数时过滤的方法是什么?
答案 0 :(得分:1)
您可以使用
some join condition OR @param IS NULL
在你的连接中,如果提供了null,它将返回所有结果 - 尽管我可以看到你没有指定传递null时你想要的行为
(当我说param时,我的意思是临时表栏在我的手机上这样做,这并不容易;)
编辑:
这个对我有用:
http://sqlfiddle.com/#!3/c7e85/26
e.g。
-- 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参数