标量函数 - 合并

时间:2013-03-01 14:23:16

标签: sql-server-2008 tsql

我有一个标量函数,写入3次并进行微小更改。我计划将这三个功能合并为一个功能。

ForStudent- A
Declare @CN INT
SELECT @cn=COUNT(*)
FROM XYZ A
WHERE A.subjects in ('1223','2234','3345')

IF @cnt>3       
SELECT @Pass=1      
ELSE       
SELECT @Pass=0 

RETURN @Pass
END




//Similarly ForStudent - B
     Declare @CN INT
        SELECT @cn=COUNT(*)
        FROM XYZ A
        WHERE A.subjects in ('1214','0987','0098')

        IF @cnt>5      
        SELECT @Pass=1      
        ELSE       
        SELECT @Pass=0 

        RETURN @Pass
        END

学生3也一样。

例如,只有3名学生(固定值= 3),他们有固定的项目。我如何将这三个功能合并为一个?

I am presently doing with
IF @Student= 'A'
BEGIN
Call the code for A
END
IF @Student = 'B'
BEGIN
Call the code for B
END
IF @Student = 'C'
Call the code for C
END

有没有人能想到更好的解决方案? 谢谢,

1 个答案:

答案 0 :(得分:0)

显而易见的方法是拥有一个StudentSubjects表(可能有一些表明它用于此功能,或使用现有的这样的表,其中3个特殊主题可以用某种方式标记)

CREATE TABLE StudentSubjects (
    StudentID char(1) not null,
    Subject char(4) not null
)

(每个学生将有3行,每个学科分开存储)

然后你的功能就是:

SELECT @cn=COUNT(*)
FROM XYZ A
WHERE A.subjects in (select Subject from StudentSubjects where StudentID=@StudentID)