在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;
假设使用 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 方言。