是否可以在sql From子句中使用Case语句

时间:2009-03-14 17:36:13

标签: sql sql-server sql-server-2005

是否可以使用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;

5 个答案:

答案 0 :(得分:23)

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

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

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

给定@clienttype谓词,只有一半的UNION可以为True。

答案 1 :(得分:6)

假设SQL Server:

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

编辑:更好的是,只需使用if语句执行适当的语句并将值赋给变量。如果可能,您应该避免使用动态SQL。

答案 2 :(得分:1)

不,您不能使用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

答案 3 :(得分:0)

由于您没有指定要反对的SQL后端,因此很难正确回答....

据我所知,您无法对MS SQL Server或Interbase / Firebird执行此操作。我不能代表其他后端服务器,但是......

马克

答案 4 :(得分:0)

我认为说答案是不可能的,这是非常安全的。而这与SQL方言无关。