在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 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;
SELECT md5
FROM hr
WHERE @clienttype = 'Employee'
AND current = 2
UNION
SELECT md5
FROM other
WHERE @clienttype = 'Member'
AND current = 2;
鉴于@clienttype谓词,联合查询只有其中一半可能为真。
假设使用的是SQL Server:
你需要使用动态SQL。构建字符串,然后使用该字符串调用sp_executesql。
编辑:最好的方法是,使用if语句来执行适当的语句,并将值赋给一个变量。如果可能的话,应避免使用动态SQL。
不,你不能使用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,您都无法做到这一点。不过,我无法代表其他后端服务器发言...
Marc
我认为可以非常肯定地说,答案绝对是否定的。不管使用哪种 SQL 方言。
WHERE
条件将针对表中的每一行执行。因此,如果条件比较复杂并且有数百万行,则可能不是一个选项。 - Alex Klaus