在PHP和JavaScript中,您可以使用Switch语句来避免使用多个if / case语句。
有没有办法在SQL中实现类似的东西,以便每种情况下运行不同的Select? 我不需要在这里介绍一个默认情况,只是一些不同的情况。
PHP示例:
<?php
$myVariableInput;
switch ($myVariableInput) {
case "input1":
// do something
break;
case "input2":
// do something different
break;
case "input3":
// do again something different
break;
}
?>
在我的情况下,我希望有一些案例,并且每个案例都有不同的Select,都在同一个存储过程中。
有人可以告诉我这是否以及如何在SQL中实现?
非常感谢蒂姆。
答案 0 :(得分:3)
您可以使用CASE
进行更简单的操作,也可以使用动态SQL进行更复杂的查询。
CASE
可以在普通的选择/视图/表值函数中使用,看起来像:
SELECT CASE WHEN x1=1 THEN (SELECT id FROM someTable) ELSE (SELECT id FROM otherTable)
对于使用动态SQL,您可以将SQL定义为字符串,也可以与CASE结合使用。请注意,这只能在存储过程中使用:
DECLARE query VARCHAR(max)
SET query = 'SELECT * FROM ' + CASE WHEN @myVariableInput = THEN 'Table1' ELSE 'Table2' END + ' WHERE some_condition='+@parameterForIt
EXEC sp_executeSql query
但是,请注意,这通常不是最佳做法,因为数据库将与不同表的不同执行计划混淆。最佳实践是您在PHP中定义的实践,具有针对不同情况的不同存储过程:
switch ($myVariableInput) {
case "input1":
// execute StoredProcedure1
break;
case "input2":
// execute StoredProcedure2
break;
case "input3":
// execute StoredProcedure3
break;
}