SQL中为UniqueIdentifier类型参数传递Null值无结果问题
解决SQL查询Emp表无结果的问题
你当前执行的SQL语句:
Declare @ID uniqueidentifier =Null select * from Emp where EmpID=@ID
之所以查不到结果,是因为SQL里**Null和任何值(包括另一个Null)用=比较的结果都是Unknown**,哪怕你的Emp表中存在EmpID为Null的记录,这个条件也匹配不到。
给你几个解决思路:
- 如果你要找EmpID为Null的记录,直接把条件改成
where EmpID IS NULL,或者用ISNULL/COALESCE统一处理Null值:Declare @ID uniqueidentifier =Null select * from Emp where ISNULL(EmpID, '00000000-0000-0000-0000-000000000000') = ISNULL(@ID, '00000000-0000-0000-0000-000000000000') - 如果@ID本来应该有实际的GUID值,检查变量赋值逻辑,确保给@ID传入了有效的uniqueidentifier值,比如:
Declare @ID uniqueidentifier = '12345678-1234-1234-1234-1234567890AB' select * from Emp where EmpID=@ID - 不推荐用
SET ANSI_NULLS OFF来强制让Null=Null成立,这会破坏SQL的标准行为,容易引发其他查询的逻辑问题。
内容的提问来源于stack exchange,提问作者at9063
相关产品推荐
相关产品推荐

