我有一个查询:
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值或者我可以处理的任何内容
这将用作交叉检查。
有人有任何想法吗?
答案 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;
有更优雅的方法,但这应该对你有用。