不是在返回零行Sql Server

时间:2014-06-11 22:27:32

标签: sql sql-server

以下查询出了什么问题。

我传递4个值作为此查询的输入,我期待三行作为输出。  因为4个值中的一个存在于listing_cart表中。 但它返回0行。

 DECLARE 
    @AgentID varchar(20),
    @StringValues varchar(max),
    @ContactKey int,
    @Note varchar(255)


    SET @AgentID = 'c110010'
    SET @StringValues  = '08-328222,08-337333,09-348444,09-352555'
    SET @ContactKey = 0
    SET @Note = ''

     SELECT   @AgentID as agentid,mlsnum,'New' as status,ADDRESS,@Note as notes,PROPERTY_TYPE as propertytype FROM mls_unified_svo_tbl (nolock)
                    WHERE mlsnum IN (Select txt From [dbo].[fn_ListToTable](@StringValues, ','))
                    AND mlsnum  NOT IN (select mlsnum from listing_cart (nolock) where agentid = @AgentID and contact_key = @ContactKey)

1 个答案:

答案 0 :(得分:2)

这是您的查询:

 SELECT @AgentID as agentid, mlsnum, 'New' as status, ADDRESS, @Note as notes,
        PROPERTY_TYPE as propertytype
 FROM mls_unified_svo_tbl
 WHERE mlsnum IN (Select txt From [dbo].[fn_ListToTable](@StringValues, ',')) AND
       mlsnum NOT IN (select mlsnum
                      from listing_cart 
                      where agentid = @AgentID and contact_key = @ContactKey
                     );

除了没有匹配的明显条件之外,还有许多可能出错的事情。你应该知道:

  • fn_ListToTable(@StringValues, ',')实际上会返回您期望的值。特别是,字符串的开头或结尾没有多余的字符。
  • listing_cart有一个名为mlsnum的列,而且从不NULL
  • 我会非常小心子查询中的列,而是使用它:

       mlsnum NOT IN (select lc.mlsnum
                      from listing_cart lc
                      where lc.agentid = @AgentID and lc.contact_key = @ContactKey
                     )
    

一种可能性是listing_cartmlsnum称为其他内容。该查询有效,因为该值与外部表相关,但not in始终返回false。