SQL Server:存储过程中的Switch语句
在PHP和JavaScript中,可以使用Switch语句来避免使用多个if/case语句 有没有一种方法可以在SQL中实现类似的功能,以便针对每种情况运行不同的Select? 我不需要在这里介绍默认情况,只需要介绍一些不同的情况 PHP示例: 在我的例子中,我希望有多个案例,每个案例都有一个不同的Select,都在同一个存储过程中 这里有人能告诉我这是否以及如何在SQL中实现吗 非常感谢,Tim。您可以使用用例进行更简单的操作,也可以使用动态SQL进行更复杂的查询 CASE可以在普通的selects/views/table值函数中使用,如下所示:SQL Server:存储过程中的Switch语句,sql,sql-server,stored-procedures,case,Sql,Sql Server,Stored Procedures,Case,在PHP和JavaScript中,可以使用Switch语句来避免使用多个if/case语句 有没有一种方法可以在SQL中实现类似的功能,以便针对每种情况运行不同的Select? 我不需要在这里介绍默认情况,只需要介绍一些不同的情况 PHP示例: 在我的例子中,我希望有多个案例,每个案例都有一个不同的Select,都在同一个存储过程中 这里有人能告诉我这是否以及如何在SQL中实现吗 非常感谢,Tim。您可以使用用例进行更简单的操作,也可以使用动态SQL进行更复杂的查询 CASE可以在普通的sele
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;
}
您可以使用用例进行更简单的操作,也可以使用动态SQL进行更复杂的查询
CASE可以在普通的selects/views/table值函数中使用,如下所示:
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;
}
非常感谢。在我的情况下,大约有50个案例,每个案例都需要使用同一个表使用不同的Select语句。每个选择都相对较小,但都有不同的查询结构。在这种情况下,您会推荐上面的工作流吗?执行的最佳方法是有50个存储过程,但如果表的条目少于十亿个,我认为这有点过分了。动态SQL应该可以很好地实现这一点。或者,如果查询在没有聚集的情况下部分重叠,那么也可以考虑将一个更大的查询定义为覆盖所有可能情况的视图,然后从视图中选择。我将尝试使用动态解决方案,因为表一开始只包含几百条记录。非常感谢。在我的情况下,大约有50个案例,每个案例都需要使用同一个表使用不同的Select语句。每个选择都相对较小,但都有不同的查询结构。在这种情况下,您会推荐上面的工作流吗?执行的最佳方法是有50个存储过程,但如果表的条目少于十亿个,我认为这有点过分了。动态SQL应该可以很好地实现这一点。或者,如果查询在没有聚集的情况下部分重叠,那么也可以考虑将一个更大的查询定义为覆盖所有可能情况的视图,然后从视图中选择。我将尝试使用动态解决方案,因为表一开始只包含几百条记录。