当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

t sql-t-sql关于内部联接表变量的一个问题

admin 71℃
在我的存储过程中,我有一个表变量包含行ID。这是两种情况-该表变量是空的,而不是。

declare @IDTable as table
(
  number NUMERIC(18,0)
)

在主查询中,我加入该表:

inner join @IDTable tab on (tab.number = csr.id)

但是:

我们知道内部连接是如何工作的,我需要查询返回一些行:

当@idtable为空时

只返回存在的行 @同上

我也试过用左键连接,但没用。有什么解决办法吗?

如果'@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

它不是最优的,但可以工作:

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)

转载请注明:我的代码 » t sql-t-sql关于内部联接表变量的一个问题