在我的存储过程中,我有一个包含行ID的表变量。这两种情况 - 表变量是空的而不是。
declare @IDTable as table
(
number NUMERIC(18,0)
)
在主查询中,我加入了该表:
inner join @IDTable tab on (tab.number = csr.id)
BUT:
因为我们知道内部联接如何工作,我需要我的查询返回一些行:
当@IDTable为空时
OR
返回 ONLY 存在的行 @IDTable
我也尝试使用LEFT加入,但它不起作用。任何想法如何解决?
答案 0 :(得分:5)
如果`@IDTable'为空,那么你返回哪些行?你是否只是忽略了加入桌面?
我不确定自己能做什么,但这可能会更容易。
if (Select Count(*) From @IDTable) == 0
begin
-- do a SELECT that doesn't join on to the @IDTable
end
else
begin
-- do a SELECT that joins on to @IDTable
end
答案 1 :(得分:2)
这不是最佳的,但它有效:
declare @z table
(
id int
)
--insert @z values(2)
select * from somTable n
left join @z z on (z.id = n.id)
where NOT exists(select 1 from @z) or (z.id is not null)