2010-08-25 50 views
0

在我的存儲過程中我有一個表變量包含行ID。這兩種情況 - 表變量是空的而不是。T-SQL有關內聯表變量的問題

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

在主查詢,所以我加入這個表:

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

但是:

,因爲我們知道如何內部聯接的作品,我需要我的查詢返回一些行:

@IDTable爲空時

OR

回報ONLY行存在於 @IDTable

我也有左試圖加入,但它不工作。任何想法如何解決它?

+0

向我們展示了'LEFT JOIN'你試過 – AakashM 2010-08-25 08:37:56

+0

的LEFT JOIN看起來理智的INNER JOIN – Tony 2010-08-25 08:55:22

+0

你有一個where子句? – HLGEM 2010-08-25 19:52:02

回答

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 
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) 
+0

不錯的代碼,爲什麼它不是最優? – Tony 2010-08-25 08:56:39

+0

@ @循環表掃描@z和clusterd索引掃描(或),查看執行計劃,對於小表來說沒關係。 :) – garik 2010-08-25 09:06:12