Est-il possible d'utiliser une déclaration de cas dans une sql clause From avec SQL 2005? Par exemple, j'essaie quelque chose comme:
SELECT Md5 FROM
CASE
WHEN @ClientType = 'Employee' THEN @Source = 'HR'
WHEN @ClientType = 'Member' THEN @Source = 'Other'
END CASE
WHERE Current = 2;
En supposant que SQL Server:
Vous auriez besoin d'utiliser du SQL dynamique. Générez la chaîne, puis appelez sp_executesql avec la chaîne.
Edit: Mieux encore, utilisez simplement les instructions if pour exécuter l'instruction appropriée et affecter la valeur à une variable. Si possible, évitez le SQL dynamique.
Je ne crois pas que ce soit possible. D'une part, les optimiseurs de requêtes supposent une liste spécifique d'éléments de type table dans la clause FROM.
La solution de contournement la plus simple à laquelle je peux penser serait une union entre les deux tables:
SELECT md5
FROM hr
WHERE @clienttype = 'Employee'
AND current = 2
UNION
SELECT md5
FROM other
WHERE @clienttype = 'Member'
AND current = 2;
Seule une moitié de l'UNION pourrait être True, étant donné le prédicat @clienttype.
Non, vous ne pouvez pas choisir une table à interroger à l'aide d'une instruction CASE. Les instructions CASE ne vont que dans les expressions, comme pour la valeur d'une colonne ou dans le cadre de votre expression WHERE.
Cela devrait le faire, si vous recherchez juste une valeur:
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
Puisque vous ne spécifiez pas le backend SQL que vous allez utiliser, il sera difficile de répondre correctement ....
Autant que je sache, vous ne pourrez le faire ni contre MS SQL Server, ni contre Interbase/Firebird. Je ne peux pas parler pour d'autres serveurs dorsaux, cependant ...
Marc
Je pense qu'il est assez prudent de dire que la réponse est impossible. Et cela indépendamment du dialecte SQL.