我有一个查询应该这样运行-
If(var = xyz) SELECT col1, col2 ELSE IF(var = zyx) SELECT col2, col3 ELSE SELECT col7,col8 FROM . . .
我如何在T-SQL中实现此目标而不为每个子句编写单独的查询?目前我正在运行它
IF (var = xyz) { Query1 } ELSE IF (var = zyx) { Query2 } ELSE { Query3 }
只是为了根据值选择不同的列而已,这只是大量的冗余代码。还有其他选择吗?
此处仅需注意,出于优化的原因,最好有3个单独的SELECTS。如果只有一个SELECT,则生成的计划将必须投影所有列col1,col2,col3,col7,col8等,尽管取决于运行时@var的值,仅需要其中一些。这可能会导致计划执行不必要的聚集索引查找,因为非聚集索引不会覆盖SELECT投影的所有列。
另一方面,3个独立的SELECTS,每个仅投影所需列的选择可能会受益于非聚集索引,这些索引在每种情况下仅覆盖您的投影列。
当然,这取决于您的数据模型的实际模式和确切的查询,但这只是一个提示,因此您不会将过程性编程的命令式思维框架带入SQL的声明式世界。