2013-04-18 37 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