English 中文(简体)
在 SQL 的 From 子句中使用 Case 语句是可能的吗?
原标题:
  • 时间:2009-03-14 17:36:12
  •  标签:

在SQL 2005中,是否可以在SQL From子句中使用Case语句?例如,我正在尝试类似以下的内容:

SELECT Md5 FROM 
CASE
    WHEN @ClientType =  Employee  THEN @Source =  HR 
    WHEN @ClientType =  Member  THEN  @Source =  Other 
END CASE 
WHERE Current = 2;
最佳回答

假设使用 SQL Server:

您需要使用动态SQL。构建字符串,然后使用该字符串调用sp_executesql。

最好使用if语句来执行相应的语句并将值分配给变量。如果可能的话,应避免使用动态SQL。

问题回答

我不相信那是可能的。首先,查询优化器假定FROM子句中具有特定的类似表的事物列表。

我能想到最简单的解决方法就是两个表之间进行UNION操作:

SELECT  md5
FROM    hr
WHERE   @clienttype =  Employee 
AND     current = 2
UNION
SELECT  md5
FROM    other
WHERE   @clienttype =  Member 
AND     current = 2;

只有联合中的一半可以是真的,根据 @clienttype 谓词。

不可以使用CASE语句来选择查询的表格。CASE语句只能用于表达式中,比如用于列的值或作为WHERE表达式的一部分。

如果你只需要一个值,那么这应该可以解决问题:

IF @ClientType =  Employee  BEGIN
    SET @Source = (SELECT Md5 FROM HR WHERE Current = 2)
END
ELSE IF @ClientType =  Member  BEGIN
    SET @Source = (SELECT Md5 FROM Other WHERE Current = 2)
END

由于您没有指定使用哪个SQL后端,因此难以确切地回答这个问题...

就我所知,您无论针对 MS SQL Server 还是 Interbase/Firebird,都无法完成此操作。不过,我无法代表其他后端服务器。

马克

我想可以肯定地说答案肯定是否定的,而且不管是哪种 SQL 方言。





相关问题
热门标签