如何处理SQL Server中多行插入的插入触发器?

时间:2015-01-28 04:30:06

标签: sql sql-server

我有以下触发器:

CREATE TRIGGER trigger_insert_student_table ON student_table
FOR INSERT
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @insertedStudentName VARCHAR(256);
    DECLARE @insertedMajor VARCHAR(256);
    DECLARE @insertedGrade VARCHAR(256);


    SET @insertedStudentName = (SELECT STUDENT_NAME FROM inserted);
    SET @insertedMajor = (SELECT MAJOR FROM inserted);
    SET @insertedGrade = (SELECT GRADE FROM inserted);

    IF (@insertedMajor='Economics' AND @insertedGrade = 'A')
    BEGIN
        /* DO SOME ACTION*/
    END

    ELSE IF(@insertedMajor='History' AND @insertedGrade = 'A')
    BEGIN
        /* DO SOME ACTION*/
    END
END

它适用于单个插入,但是当我执行多行插入时,它会失败并出现以下错误:

  

子查询返回的值超过1。这是不允许的   子查询跟随=,!=,<,< =,>,> =或当子查询用作   表达。

如何遍历每个插入的行并处理操作?

1 个答案:

答案 0 :(得分:2)

不要迭代。一旦你发现自己在说#34;如何迭代"在SQL中,你做错了。而不是将这些值设置为变量,而是考虑基于集合的操作。按照"插入的方式思考。主要='历史'和inserted.Grade =' A'。

我不知道"某些动作"是你想在这里做的,但这只是一个简单的例子:

update t
set UpdateDate = getdate(),
    isStarEconomicsStudent = 1
from somePresentationTable a
inner join inserted i
    on a.StudentID = i.StudentID
        and i.Major = 'Economics'
        and i.Grade = 'A'