SQL Server:存储过程中的Switch语句

时间:2014-04-26 10:39:47

标签: sql sql-server stored-procedures case

在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中实现?

非常感谢蒂姆。

1 个答案:

答案 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;
}