首页 > 解决方案 > SQL Server 2017 触发器 - 声明变量

问题描述

今天第一次做SQL Server,平时用的是MySQL。

我做了一些搜索,但是,我就是不明白。

这是代码:

CREATE TRIGGER "PREMI_after_insert" 
ON "PREMI" 
AFTER INSERT 
AS
    DECLARE @umur INT

    SELECT 
        @umur = DATEDIFF(YEAR, CAST(GETDATE() AS DATE),
       (CASE 
           WHEN ISNUMERIC(SELECT NoTerdaftar FROM inserted) = 1 
              THEN (SELECT CAST(TglLahir AS DATE) 
                    FROM KARYAWAN 
                    WHERE NoPegawai = (SELECT NoTerdaftar FROM inserted)) 
              ELSE (SELECT CAST(TglLahir AS DATE) 
                    FROM KELUARGA 
                    WHERE NoPeserta = (SELECT NoTerdaftar FROM inserted)) 
       END))

    DECLARE @plafond DECIMAL(20,0) 

    SELECT @plafond = (CASE  
                          WHEN ISNUMERIC(SELECT NoTerdaftar FROM inserted) = 1 
                             THEN (SELECT Plafond 
                                   FROM KARYAWAN 
                                   WHERE NoPegawai = (SELECT NoTerdaftar FROM inserted)) 
                             ELSE (SELECT Plafond 
                                   FROM KELUARGA 
                                   WHERE NoPeserta = (SELECT NoTerdaftar FROM inserted)) 
                       END)

    DECLARE @rat DECIMAL(7,6) 

    SELECT @rat = RE.Rate 
    FROM RATES RE 
    WHERE RE.KodeAsuransi = (SELECT JenisAsuransi FROM ASURANSI 
                             WHERE Id = (SELECT ID_Asuransi FROM inserted)) 
      AND @umur BETWEEN RE.UsiaMin AND RE.UsiaMax

BEGIN

    UPDATE PREMI
    SET JumlahPremi = (@plafond * @rat)
    WHERE Id = (SELECT Id FROM insterted)
END;

这就是错误

在此处输入图像描述

请不要欺负我,该代码是我在阅读大量其他线程后得到的......

我只是不明白 SQL Server 中触发器的结构。

有些使用“GO”字,有些甚至不使用 BEGIN 和 END,这是 MySQL 中的关键......

标签: sql-servertriggers

解决方案


推荐阅读