我在SQL Server存储过程中有以下查询
SELECT SZ_SK FROM tbl_Class CC
INNER JOIN tbl_Location LR ON CC.LCTN_RSTN = LR.LCTN_RSTN
WHERE LR.LCTN_RSTN = ISNULL(@Location,LR.LCTN_RSTN)
我遇到了一个问题,我意识到在tbl_Class
中LCTN_RSTN
值可能是NULL
,tbl_Location
没有NULL
字段。这是一个问题,因为如果@Location = NULL
,那么我想要显示CC.LCTN_RSTN= NULL
的字段。我能以任何方式做到这一点吗? (SZ_SK
仅存在于tbl_Class
。)
答案 0 :(得分:1)
假设LCTN_RSTN是一个字符串而你不在任何地方使用空字符串
SELECT SZ_SK FROM tbl_Class CC
INNER JOIN tbl_Location LR ON ISNULL(CC.LCTN_RSTN, '') = ISNULL(LR.LCTN_RSTN, '')
WHERE LR.LCTN_RSTN = ISNULL(@Location,LR.LCTN_RSTN)
将加入空值。 NULL!= NULL,但转换为空字符串,''=''
这里的基本技巧是使用超出实际范围的标记值。例如,如果LCTN_RSTN是IDENTITY(1,1),则使用-1作为空值的默认值。
答案 1 :(得分:1)
试试这个
SELECT SZ_SK FROM tbl_Class CC
INNER JOIN tbl_Location LR
ON coalesce(CC.LCTN_RSTN,'') = coalesce(LR.LCTN_RSTN,'')
WHERE (@Location is null) or (coalesce(LR.LCTN_RSTN,'') = @Location)