Самая простая форма - всегда лучшая
CREATE FUNCTION [dbo].[age](@set varchar(10))
RETURNS TABLE
AS RETURN
SELECT * from player
where ((@set = 'tall' and height > 180)
or (@set = 'average' AND height >= 155 and height <=175)
or (@set = 'low' AND height < 155))
GO
Эта форма называется табличной функцией INLINE, что означает, что SQL Server может свободно расширять ее, чтобы присоединить проигрыватель непосредственно к другим таблицам в строке большего запроса., заставляя его выполнять бесконечно 1 лучше , чем табличная функция с несколькими утверждениями.
Вы можете предпочесть это, хотя, чтобы ваши диапазоны были полными (у вас естьпромежуток между 175 и 180)
where ((@set = 'tall' and height > 180)
or (@set = 'average' AND height >= 155 and height <= 180)
or (@set = 'low' AND height < 155))
SQL Server обеспечивает короткое замыкание ветвей при разборе переменной @set.
1 преувеличение, но незначительно