2013-04-18 38 views
1

在我的存儲過程的中間,我有下面的代碼片斷:如果的情況之間存在語句時條件SQL

case 
    when l.codeleasestatuscode = '5' and priorleaseid is null 
    and l.leaid in(select col1 from Waitlisthousehold) 
then '2' 
else l.codeleasestatuscode 
end 

然而,最後的條件,其中i具有從表Waitlisthousehold選擇,有一個問題。並非所有數據庫都有該表。所以我希望在表格存在時包含最後一個條件。但當我嘗試這樣做時,我收到錯誤:

case 
when l.codeleasestatuscode = '5' and priorleaseid is null 
IF EXISTS(select * from information_schema.tables where table_name='WaitlistHousehold') 
    begin 
    and l.leaid in(select col1 from Waitlisthousehold) 
    end 
then '2' 
else l.codeleasestatuscode 
end 

那麼,我該如何正確地做到這一點?

這個片段是內從語句(FROM表1上a.id = b.id和情況下,當一個連接表2 b ..)

+1

在SQL Server的猜測?如果是這樣,沒有使用動態SQL就無法做到這一點 - 每個查詢都會根據它所訪問的表進行修復。 – 2013-04-18 06:55:27

回答

0

你不能使得那樣的SELECT語句中添加。你可以這樣做:

IF EXISTS(select * from information_schema.tables where table_name='WaitlistHousehold') 
    BEGIN 
    SELECT whatever, 
    case 
    when l.codeleasestatuscode = '5' and priorleaseid is null 
    and l.leaid in(select col1 from Waitlisthousehold) 
    then '2' 
    else l.codeleasestatuscode 
    end AS whatever1 
    FROM wherever 
    END 
ELSE 
    BEGIN 
    SELECT whatever, 
    case 
    when l.codeleasestatuscode = '5' and priorleaseid is null 
    then '2' 
    else l.codeleasestatuscode 
    end AS whatever1 
    FROM wherever 
    END 
+2

如果它是SQL Server(看起來很可能是OP的前面的問題),這將不起作用,因爲它會嘗試編譯整個批處理,並且缺少表將阻止編譯成功。 – 2013-04-18 07:00:31

3

你可以有另一種情況,當你第一個內部或檢查表中存在不

CASE 
WHEN l.codeleasestatuscode = '5' and priorleaseid is null 
    CASE WHEN EXISTS(SELECT * FROM information_schema.tables WHERE table_name='WaitlistHousehold') 
     THEN 
      CASE WHEN l.leaid in(select col1 from Waitlisthousehold) THEN '2' 
      ELSE l.codeleasestatuscode END 
     ELSE '2' END   
    THEN '2'END 
ELSE l.codeleasestatuscode 
END 
+0

謝謝你在CASE表達式中的EXISTS,但這個片段將返回錯誤不正確的語法 – 2013-04-18 08:19:25

+0

哈哈..我寫CASE WHERE而不是CASE WHEN,現在檢查答案 – 2013-04-18 09:24:38

+0

像Damien_The_Unbeliever說,這將無法在SQL服務器中工作。 – 2016-04-18 05:50:52