我有一个存储过程,其中我想选择一个表t的所有记录,其中user_id字段等于参数p_user_id:
SELECT * FROM T WHERE user_id = p_user_id;
但如果参数为NULL(如果您愿意,则为零)我想要所有记录。 也就是说,我无法想到WHERE子句中的CASE。
答案 0 :(得分:2)
SELECT * FROM T
WHERE user_id = p_user_id
OR p_user_id is null
OR p_user_id = 0
应该工作。
如果p_user_id为null,那么子句user_id = p_user_id
将等同于UNKNOWN,大多数数据库中的结果将不匹配任何行(sybase是一个例外)。
答案 1 :(得分:2)
SELECT * FROM T WHERE user_id = p_user_id or p_user_id is null or p_user_id = 0;
答案 2 :(得分:0)
SELECT * FROM T WHERE user_id = @p_user_id OR @p_user_id IS NULL
当参数为NULL(NULL IS NULL == TRUE)
时,OR子句为true答案 3 :(得分:0)
如果我理解正确,你想要这个:
IF p_user_id IS NULL
(SELECT * FROM T);
ELSE
(SELECT * FROM T WHERE user_id = p_user_id)