回答

收藏

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夸张,但只有一点点
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则