gpt4 book ai didi

sql - TSQL - 计算多语句表 UDF 中的特定值并将它们传递给附加列

转载 作者:搜寻专家 更新时间:2023-10-30 23:21:44 25 4
gpt4 key购买 nike

在我的项目编码过程中,我遇到了障碍,无法解决这个问题...

这是我想要实现的目标,我有一个简单的表,用于存储与足球运动员相关的数据,例如:号码 (ID)、姓名、目标(是额外的,但现在是无关紧要的)并且我创建了一个UDF 多语句表 LotOfGoals,如下所示:

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

现在的 MembershipLevel 函数:

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 子句之后,我想将每个目标数量传递给 MembershipLevel,然后将其返回值插入到新列 FuzzyLevel 中。

如果有任何提示、想法等,我将非常感激。提前致谢!

是的,我会改成内联的。还有一个问题是有什么方法可以在 where 子句中使用 FuzzyLevel 列吗? (我收到无效的列名“FuzzinessLevel”)我想要的是限制允许的模糊级别。我用一个额外的参数 @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

但是在执行之后我也收到了带有 NULL 值的记录。

好的,我已经解决了。刚刚解决了以下不等式:x > 4y + 2。有效,但我很好奇为什么不能在 Where 子句中使用新列。

感谢一百万!

最佳答案

只需将其添加为列,因为 MembershipLevel 是标量 udf。与外部代码无关(存储过程或表值 udf 或 SELECT)

INSERT    @Players (Number, Name, Goals, FuzzyLevel)
SELECT Number, Name, Goals,

dbo.MembershipLevel(Goals)

FROM FuzzyFootballTeam ft
WHERE Goals > 2
ORDER BY Number

观察:我明确指定了@Players 的列列表。我还会问自己为什么这不是一个内联表值函数:多语句 udf 通常是性能 killer ...

关于sql - TSQL - 计算多语句表 UDF 中的特定值并将它们传递给附加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5850707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com