代码之家  ›  专栏  ›  技术社区  ›  El.Hum

如何从查询中获得NULL而不是No值

  •  4
  • El.Hum  · 技术社区  · 8 年前

    我的问题是:

    SELECT ISNULL(S.Name+'.'+T.Name,'Table Not Found')
    FROM DataProfile.Tables T
    INNER JOIN DataProfile.Schemas S ON T.schemaId=S.Id
    WHERE S.Name+'.'+T.Name=@TableName
    

    然后我试着

    IIF(LEN(S.Name+'.'+T.Name)>0,S.Name+'.'+T.Name,NULL)
    

    但是当它找不到命名表时,它返回not output、Value或Null值或我可以处理的任何内容。 这将用作交叉检查。
    有人知道吗?

    4 回复  |  直到 5 年前
        1
  •  4
  •   El.Hum    8 年前

    感谢那些关注我确切要求的人和他们的回复。 以下是我尝试的方式:

    DECLARE @Check NVARCHAR(MAX) = 'TABLE DOES NOT FOUND'
    
    SELECT @Check= S.Name + '.' + T.Name
    FROM DataProfile.Tables T
    INNER JOIN DataProfile.Schemas S ON T.schemaId=S.Id
    WHERE S.Name+'.'+T.Name=@TableName
    
    SELECT @CHECK
    

    这对我来说很管用

        2
  •  3
  •   avb    8 年前

    这将始终返回一行:

    select v.TableName, ISNULL(found.result, 'not found') result
    from (values(@TableName))v(TableName)
        outer apply (
            select CAST('found' as nvarchar(11)) result
            from DataProfile.Tables T
                join  DataProfile.Schemas S ON T.schemaId=S.Id
            where S.Name+'.'+T.Name=v.TableName
        )found
    
        3
  •  1
  •   Imran Ali Khan    8 年前

    你应该试试这个

    SELECT CASE WHEN (LEN(S.Name + '.' + T.Name))> 1 THEN S.Name + '.' + T.Name ELSE NULL END
    

    所以你看起来像

    SELECT CASE 
           WHEN (LEN(S.Name + '.' + T.Name))> 1 THEN 
              S.Name + '.' + T.Name 
           ELSE 
              NULL -- Here use any expresion which you want
           END
    FROM DataProfile.Tables T
    INNER JOIN DataProfile.Schemas S ON T.schemaId=S.Id
    WHERE S.Name+'.'+T.Name=@TableName
    

    在这里,您使用的是ISNULL(S.Name+“.+T.Name,'Table Not Found'),它永远不会返回假部分,因为如果S.Name和T.Name都为null,那么该值仍然为'。”

        4
  •  1
  •   gmiley    8 年前

    试着这样做:

    with table_qry as
    (
        select S.Name as SName, T.Name as TName
        from DataProfile.Tables T
        inner join DataProfile.Schemas S 
        on T.SchemaId = S.Id
        where S.Name+'.'+T.Name = @TableName
    )
    select case when (select count(1) from table_qry) > 0 then
        SName+'.'+TName else 'Table Not Found' end as TableName
    from table_qry;
    

    有更优雅的方法,但这应该适合你。