TSQL-计算多语句表UDF中的特定值,并将其传递给其他列
在我的项目编码过程中,我遇到了一个障碍,无法解决这个问题 这是我想要实现的,我有一个简单的表,其中存储了与足球运动员相关的数据,如:编号(ID)、姓名、进球(是附加的,但现在不相关),我创建了一个UDF多状态表格LOTOFGALS,如下所示:TSQL-计算多语句表UDF中的特定值,并将其传递给其他列,sql,sql-server,database,tsql,user-defined-functions,Sql,Sql Server,Database,Tsql,User Defined Functions,在我的项目编码过程中,我遇到了一个障碍,无法解决这个问题 这是我想要实现的,我有一个简单的表,其中存储了与足球运动员相关的数据,如:编号(ID)、姓名、进球(是附加的,但现在不相关),我创建了一个UDF多状态表格LOTOFGALS,如下所示: CREATE FUNCTION LotOfGoals() RETURNS @Players TABLE ( Number INT, Name VARCHAR(20), Goals INT
CREATE FUNCTION LotOfGoals()
RETURNS @Players TABLE
(
Number INT,
Name VARCHAR(20),
Goals INT
FuzzyLevel FLOAT(3) --extra column which I would like to add to result
)
AS
BEGIN
INSERT @Players
SELECT Number, Name, Goals
FROM FuzzyFootballTeam
WHERE Goals > 2
ORDER BY Number
-- here FuzzyLevel column should include data counted by MembershipLevel
-- scalar UDF.
-- I want to pass each number of goals into MembershipLevel function and
-- insert return value into a new column FuzzyLevel.
RETURN
END
GO
现在,成员级别功能:
CREATE FUNCTION MembershipLevel(@Goals INT)
RETURNS float(3)
AS
BEGIN
DECLARE @Level float(3)
SET @Level = 0.25*@Goals - 0.5;
RETURN @Level
END
正如我所写的,在WHERE子句之后,我希望将每个数量的目标传递给一个成员级别,然后将其返回值插入到新的FuzzyLevel列中
如果有任何提示、想法等,我将非常感激。
提前谢谢
是的,我会换成直列式。还有一个问题,在where子句中是否有任何方法可以使用FuzzyLevel列?(我收到无效的列名'FuzzinessLevel')我想要的是限制允许的fuzzylevel。我用另外一个参数@AcceptedFuzzyLevel float扩展了这两个函数,标量函数如下所示:
DECLARE @Level float(3)
DECLARE @TempLevel float(3)
IF (@Goals <= 2)
SET @TempLevel = 0;
IF (@TempLevel >= @FuzzyLevelAccepted)
SET @Level = @TempLevel;
ELSE IF (@Goals > 2 AND @Goals < 6)
SET @TempLevel = 0.25*@Goals - 0.5;
IF (@TempLevel >= @FuzzyLevelAccepted)
SET @Level = @TempLevel;
ELSE IF (@Goals >= 6)
SET @TempLevel = 1;
IF (@TempLevel >= @FuzzyLevelAccepted)
SET @Level = @TempLevel;
RETURN @Level
声明@Level float(3)
声明@TempLevel浮动(3)
如果(@Goals=@FuzzyLevelAccepted)
设置@Level=@templavel;
否则如果(@Goals>2和@Goals<6)
设置@TempLevel=0.25*@目标-0.5;
如果(@templavel>=@fuzzylevel已接受)
设置@Level=@templavel;
否则如果(@Goals>=6)
设置@TempLevel=1;
如果(@templavel>=@fuzzylevel已接受)
设置@Level=@templavel;
返回@Level
但在执行之后,我也会收到带有空值的记录
好的,我已经修好了。刚刚解决了以下不等式:x>4y+2。行得通,但我很好奇为什么不能在Where子句中使用新列
万分感谢 只需将其添加为列,因为
MembershipLevel
是一个标量udf。外部代码(存储过程或表值udf或SELECT)无关紧要
观察:我将明确指定@Players的列列表。我还想问自己,为什么这不是一个内联表值函数:多语句udf通常是性能杀手
INSERT @Players (Number, Name, Goals, FuzzyLevel)
SELECT Number, Name, Goals,
dbo.MembershipLevel(Goals)
FROM FuzzyFootballTeam ft
WHERE Goals > 2
ORDER BY Number