修改加入SQL Server

时间:2013-03-26 17:52:26

标签: sql sql-server tsql

我在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_ClassLCTN_RSTN值可能是NULLtbl_Location没有NULL字段。这是一个问题,因为如果@Location = NULL,那么我想要显示CC.LCTN_RSTN= NULL的字段。我能以任何方式做到这一点吗? (SZ_SK仅存在于tbl_Class。)

2 个答案:

答案 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)