【发布时间】:2017-12-04 12:52:01
【问题描述】:
我写了这两个函数:
USE muziekdatabase
GO
CREATE FUNCTION fnSpecNivAantal
(
@Niveau as char(1)
)
RETURNS char(1)
AS
BEGIN
DECLARE @Aantal AS int
IF @Niveau = 'A'
SET @Aantal = (SELECT COUNT(*) FROM STUK WHERE niveaucode = 'A')
ELSE IF @Niveau = 'B'
SET @Aantal = (SELECT COUNT(*) FROM STUK WHERE niveaucode = 'B')
ELSE IF @Niveau = 'C'
SET @Aantal = (SELECT COUNT(*) FROM STUK WHERE niveaucode = 'C')
RETURN @Aantal
END
USE muziekdatabase
GO
ALTER FUNCTION fnHoogsteNummer
(
@EersteNummer as numeric,
@TweedeNummer as numeric
)
RETURNS numeric
AS
BEGIN
DECLARE @HoogsteNummer as VARCHAR(MAX)
IF MAX(@Eerstenummer) > MAX(@TweedeNummer)
SET @HoogsteNummer = @EersteNummer
ELSE IF
MAX(@Tweedenummer) > MAX(@Eerstenummer)
SET @HoogsteNummer = @TweedeNummer
ELSE IF
@EersteNummer = @TweedeNummer
SET @HoogsteNummer = 'Nummers zijn gelijk'
ELSE
SET @HoogsteNummer = 'Er is iets fout gegaan'
RETURN @HoogsteNummer
END
现在它们几乎可以正常工作了。但有一件事不太对劲。当我在函数中插入一个值时,结果是一个具有相同答案的整个列表。就像 10 行只有 3,它应该只有 1 行,数字 3。我知道我可以使用 DISTINCT,但我认为该函数有问题。我尝试使用CASE / WHEN,但这也不起作用..
【问题讨论】:
-
标记您正在使用的 dbms。 (该代码是特定于产品的。)
-
MS SQL Server 2017
-
@MrEmper 。 . .您的代码有很多错误,我投票结束时过于宽泛。 (使用
MAX()不带SELECT,设置字符串等于数字,函数定义为返回数字时返回字符串,毫无疑问更多)。 -
它运行没有任何错误,你能说重点吗?
-
您能否包含使用这些函数的查询以及一些输入样本和所需的输出?
标签: sql sql-server sql-server-2017