2013-03-26 60 views
0

我已经在SQL Server中下面的查询存储过程修改加入SQL服务器

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

回答

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

+0

大,不完全是我用,但它让我在正确的轨道上,因为我意识到我可以做这样的事情这工作对我来说:'ISNULL(CC.LCTN_RSTN,@NoneValue )= LR.LCTN_RSTN' – 2013-03-26 18:09:14

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)