Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql-选择字段集为空或为空的所有记录_Sql_Stored Procedures_Select - Fatal编程技术网

sql-选择字段集为空或为空的所有记录

sql-选择字段集为空或为空的所有记录,sql,stored-procedures,select,Sql,Stored Procedures,Select,我有一个存储过程,我想在其中选择表T的所有记录,该表T的user_id字段等于参数p_user_id: SELECT * FROM T WHERE user_id = p_user_id; 但是如果参数为NULL或零,如果您愿意,我想要所有记录。 也就是说,我想不出WHERE子句中的情况 SELECT * FROM T WHERE user_id = p_user_id OR p_user_id is null OR p_user_id = 0 应该有用 在这里,如果p_user_id为nu

我有一个存储过程,我想在其中选择表T的所有记录,该表T的user_id字段等于参数p_user_id:

SELECT * FROM T WHERE user_id = p_user_id;
但是如果参数为NULL或零,如果您愿意,我想要所有记录。 也就是说,我想不出WHERE子句中的情况

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,在大多数数据库中,这将导致不匹配任何行的结果,这是一个例外。

从T中选择*其中user_id=@p_user_id或@p_user_id为null

 SELECT * FROM T WHERE user_id = p_user_id or p_user_id is null or p_user_id = 0;

当参数为NULL时,OR子句为true NULL is NULL==true

如果我理解正确,您希望:

IF p_user_id IS NULL
    (SELECT * FROM T);
ELSE
    (SELECT * FROM T WHERE user_id = p_user_id)

如果p_user_id为null,则user_id=p_user_id子句将始终为false-否,它应该是未知的,并且区别是至关重要的。如果为FALSE,则除非明确处理,否则每个检查约束都将拒绝NULL值……这在您自己发布的链接中明确说明:仅选择返回TRUE值的列或导致指定操作;那些返回错误或未知的不会。。。通常,比较空值的结果是未知的,因为无法确定空值是否等于给定值或另一个空值。