如何从查询中获取NULL而不是No Value

时间:2017-11-28 11:16:15

标签: sql sql-server sql-server-2008 tsql

我有一个查询:

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)

但是当它没有找到命名表时,不返回输出,Value或Null值或者我可以处理的任何内容 这将用作交叉检查。
有人有任何想法吗?

4 个答案:

答案 0 :(得分:4)

感谢那些关注我的确切要求和回应的人。 这是我尝试的方式:

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

那为我工作

答案 1 :(得分:3)

这将始终返回一行:

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

答案 2 :(得分:1)

你应该试试这个

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

所以你的qry看起来像

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'),它永远不会返回false部分,因为如果S.Name和T.Name都为null,那么该值仍然是''

答案 3 :(得分:1)

尝试这样做:

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;

有更优雅的方法,但这应该对你有用。