がSQL Serverのインデックス付きビューに挿入された後にを作成できますか?SQLサーバーの挿入トリガー後
インデックス付きビューのSQL Serverに挿入後トリガを作成しています。
CREATE TRIGGER t_STUD_FUZZY_CERTIFICATIONS_mv
ON STUD_FUZZY_CERTIFICATIONS_mv
AFTER INSERT AS
BEGIN
DECLARE
@count_rec int,
@new_poor INT,
@new_average INT,
@new_excellent INT,
@new_stud_num VARCHAR(10),
@new_mem_set INT,
@new_lname VARCHAR(25),
@new_fname VARCHAR(25),
@new_report_date date,
@new_total_certs INT
select @new_stud_num=stud_num, @new_mem_set=mem_set, @new_lname=lname, @new_fname=fname, @new_report_date=report_date, @new_total_certs=total_certs from inserted;
select @count_rec = count (*) from fuzzy_param_trapezoid where MEM_SET = (select mem_set from inserted);
--dbms_output.put_line(count_rec);
if(@count_rec = 0)
begin --if
--update fuzzy attributes of stud_fuzzy_orders_mv
SET @new_poor = dbo.FIT.update_certs_poor(@new_stud_num, @new_total_certs, @new_mem_set);
SET @new_average = dbo.FIT.update_certs_average(@new_stud_num, @new_total_certs, @new_mem_set);
SET @new_excellent = dbo.FIT.update_certs_excellent(@new_stud_num, @new_total_certs, @new_mem_set);
INSERT INTO STUD_FUZZY_CERTIFICATIONS values(@new_stud_num,
@new_mem_set,
@new_lname,
@new_fname,
@new_report_date,
@new_total_certs, dbo.FIT.update_certs_poor(@new_stud_num, @new_total_certs, @new_mem_set),
dbo.FIT.update_certs_average(@new_stud_num, @new_total_certs, @new_mem_set),
dbo.FIT.update_certs_excellent(@new_stud_num, @new_total_certs, @new_mem_set));
UPDATE STUD_FUZZY_CERTIFICATIONS_mv set [email protected]_poor, [email protected]_average, [email protected]_excellent where [email protected]_stud_num and [email protected]_mem_set;
end;--end if
END;
GO
私は以下のエラーに
Msg 8197, Level 16, State 6, Procedure t_STUD_FUZZY_CERTIFICATIONS_mv, Line 1
The object 'STUD_FUZZY_CERTIFICATIONS_mv' does not exist or is invalid for this operation.
を取得していますし、私は、唯一の正しいデータベース上STUD_FUZZY_CERTIFICATIONS_mvは、データベース内の既存されているオブジェクトを実行しています。
このトリガーは壊れています。 'inserted'はちょうど1行しか含まないと仮定しています。これは安全な仮定ではありません。 'inserted'には0,1または*複数の行が含まれていて、これを処理するためにトリガーを書くべきです(理想的には、' inserted'を他のテーブルに加えて* set *ベースの変更を作成する)。 –