TSQL-在表值函数中If..Else语句-无法通过
技术问答
274 人阅读
|
0 人回复
|
2023-09-14
|
在发布之前,我读了几篇关于开发的文章USD函数文章,但还没有遇到解决我问题的方法…如下:3 S" \- a# O) o
我有一个非常简单的数据库,该数据库存储篮球运动员,并由ID,Age,Height和Name列组成。我想做的是使用参数。@set
" D4 [& P7 q# N% ?( K/ G" ~varchar(10)实现一个函数’height’,这个函数取决于一个函数@set不同的值会触发select语句
e, \9 m4 H6 d3 j我试图实现伪代码:* Q8 L) u T$ H7 E) h, D. @* q4 G
CREATE FUNCTION [dbo].[age](@set varchar(10))RETURNS TABLEASBEGIN IF (@set = 'tall SELECT * from player where height > 180 ELSE IF (@set = 'average SELECT * from player where height >= 155 and height 谁能给我一个如何实现它的提示?/ g [$ M+ r8 \. P
$ I/ S' i/ o' q* J# ~+ X/ r: P 解决方案:
1 i6 O l' I1 ~ 最简单的形式永远是最好的; x$ F5 |% p: I8 s
CREATE FUNCTION [dbo].[age](@set varchar(10))RETURNS TABLEAS RETURNSELECT * from playerwhere ((@set = 'tall' and height > 180) or (@set = 'average' AND height >= 155 and height 这种形式叫做INLINE表函数,这意味着SQL Server它可以自由扩展,直接将播放器连接到行业内其他更大查询的表,从而使其性能比多语句表值函数好
$ Y' d7 {+ q/ n6 a4 H/ R/ V) s无限 好1。" b4 a" R% i g) I. R/ d* `2 J
然而,你可能更喜欢这样做,以使你的范围完整(你的差距在175和180之间)
9 p( w7 r* L) c! v' d Dwhere ((@set = 'tall' and height > 180) or (@set = 'average' AND height >= 155 and height 当解析变量@set时,SQL Server负责短路分支。1 [+ h; N7 S8 B/ u' `9 u( @. F
1夸张,但只有一点点 |
|
|
|
|
|