在标量 SQL 函数中通过 id 访问特定行值
Accessing specific row value by id in a scalar SQL function
如何在函数中使用 table 'course' by 'course_id' 字段 'ranking' 的特定值?如果参数给出的值较高,我需要 return 1,如果值较低,则需要 0。因此,我需要以某种方式基于 course_id 作为参数从 table 获取数据。
CREATE OR ALTER FUNCTION dbo.f_rank (@course_id INT, @user_ranking INT)
RETURNS INT
AS
BEGIN
RETURN
CASE
WHEN @course_id.ranking > @user_ranking THEN 1
ELSE 0
END
END
函数returns 0或1后我需要显示:
如果调用函数 returns 1,则显示“ 的排名高于分数”,否则显示“ 的排名低于分数”。
示例数据:
course_id | course_name | ranking
1 | GIT | 10
2 | CSS | 2
3 | C++ | 6
我需要比较 course_id = 1 的排名,例如 10 与作为参数给出的随机数。 course_id 也作为参数给出。
例如:
如果用户选择作为输入参数(course_id = 1 和 user_ranking = 5)
预期结果:
'Ranking of GIT is above score'
- 如果函数 returns 1
'Ranking of GIT is below score'
- 如果函数 returns 0
我假设您可能想要这样的东西(没有应要求提供预期结果):
--Note you will have to DROP your old function if already exists as a scalar function first.
--You cannot ALTER a scalar function to be a table function.
CREATE OR ALTER FUNCTION dbo.f_rank (@course_id INT, @user_ranking INT)
RETURNS table
AS RETURN
SELECT CONVERT(bit, CASE WHEN C.ranking > @user_ranking THEN 1 ELSE 0 END) AS SomeColumnAlias --Obviusly give this a proper name
FROM dbo.Course C
WHERE C.Course_id = @course_id;
GO
正如我提到的,我使用内联 table 值函数,因为这可能会更高效,而且你没有提到你的 SQL 服务器版本(所以不知道如果你在 2019 年,那么可以使用可内联标量函数)。
如何在函数中使用 table 'course' by 'course_id' 字段 'ranking' 的特定值?如果参数给出的值较高,我需要 return 1,如果值较低,则需要 0。因此,我需要以某种方式基于 course_id 作为参数从 table 获取数据。
CREATE OR ALTER FUNCTION dbo.f_rank (@course_id INT, @user_ranking INT)
RETURNS INT
AS
BEGIN
RETURN
CASE
WHEN @course_id.ranking > @user_ranking THEN 1
ELSE 0
END
END
函数returns 0或1后我需要显示:
如果调用函数 returns 1,则显示“
示例数据:
course_id | course_name | ranking
1 | GIT | 10
2 | CSS | 2
3 | C++ | 6
我需要比较 course_id = 1 的排名,例如 10 与作为参数给出的随机数。 course_id 也作为参数给出。
例如: 如果用户选择作为输入参数(course_id = 1 和 user_ranking = 5) 预期结果:
'Ranking of GIT is above score'
- 如果函数 returns 1'Ranking of GIT is below score'
- 如果函数 returns 0
我假设您可能想要这样的东西(没有应要求提供预期结果):
--Note you will have to DROP your old function if already exists as a scalar function first.
--You cannot ALTER a scalar function to be a table function.
CREATE OR ALTER FUNCTION dbo.f_rank (@course_id INT, @user_ranking INT)
RETURNS table
AS RETURN
SELECT CONVERT(bit, CASE WHEN C.ranking > @user_ranking THEN 1 ELSE 0 END) AS SomeColumnAlias --Obviusly give this a proper name
FROM dbo.Course C
WHERE C.Course_id = @course_id;
GO
正如我提到的,我使用内联 table 值函数,因为这可能会更高效,而且你没有提到你的 SQL 服务器版本(所以不知道如果你在 2019 年,那么可以使用可内联标量函数)。