TSQL-计算多语句表UDF中的特定值,并将其传递给其他列

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

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

这是我想要实现的,我有一个简单的表,其中存储了与足球运动员相关的数据,如:编号(ID)、姓名、进球(是附加的,但现在不相关),我创建了一个UDF多状态表格LOTOFGALS,如下所示:

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