Я предлагаю вам использовать триггер вместо, чтобы уменьшить количество записей в таблицу.Использование обновления в триггере приведет к удалению, а затем к вставке, так что всего три операции выполняются на столе.Использование вместо триггера повлечет за собой только одну операцию
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[BaseTable]') AND type in (N'U'))
DROP TABLE [dbo].[BaseTable]
GO
CREATE TABLE BaseTable
(BaseTableID int PRIMARY KEY IDENTITY(1,1),
course@ int,
QYear int,
SUID int,
units int,
Grade int
)
GO
--Create an INSTEAD OF INSERT trigger on the table.
CREATE TRIGGER InsteadTrigger on BaseTable
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO BaseTable
SELECT
course@ ,
QYear ,
SUID ,
units ,
CASE
WHEN Grade > 20 THEN 3
ELSE Grade
END
FROM inserted
END
GO
INSERT INTO [deleteme].[dbo].[BaseTable]
([course@]
,[QYear]
,[SUID]
,[units]
,[Grade])
VALUES
(10
,10
,10
,10
,10)
Select * from BaseTable
INSERT INTO [deleteme].[dbo].[BaseTable]
([course@]
,[QYear]
,[SUID]
,[units]
,[Grade])
VALUES
(20
,20
,20
,20
,20)
Select * from BaseTable
INSERT INTO [deleteme].[dbo].[BaseTable]
([course@]
,[QYear]
,[SUID]
,[units]
,[Grade])
VALUES
(30
,30
,30
,30
,30),
(40
,40
,40
,40
,40),
(50
,50
,50
,50
,50)
Select * from BaseTable
BaseTableID course@ QYear SUID units Grade
1 10 10 10 10 10
2 20 20 20 20 20
3 30 30 30 30 3
4 40 40 40 40 3
5 50 50 50 50 3