0

我在 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。)

4

2 回答 2

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 作为空值的默认值。

于 2013-03-26T17:55:43.130 回答
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)
于 2013-03-26T17:56:29.303 回答