这是原始的 SQL Server 2008 触发器:
CREATE TRIGGER InsertVehTrig ON dbo.Vehicle
FOR INSERT AS
declare @Cph char(50),
@DevID char(12),
@VehID bigint,
@TmpID bigint,
@DevCount int
begin
set nocount on
select @Cph = rtrim(ltrim(i.cph)), @VehID = i.ID, @DevID = DevID
from inserted i
if(@VehID is null)
return select @DevCount= count(id) from vehicle where (cph=@cph) or (DevID=@DevID)
--选择记录--条件:当前的车牌号 或 设备ID
if ( @DevCount>1)
--如果记录数,超过1,则认为有重复
rollback tran
else if (@DevCount = 1)
begin
select @TmpID = id from vehicle where (cph = @cph) or (DevID = @DevID)
if (@TmpID != @VehID)
--如果增加的车牌号码与数据库中的在相同的,则不允许增加
rollback tran
end
--增加,此时需要在Tbl_Toll中增加
/* insert into tbl_Toll (VehID,[Money], Payer, PayerTel, TollDate, ValidDate, Demo, UserName)
values(@VehID, 0, 'LiaoYuan', '0755-26506932', DATEADD(month, 1, getDate()), DATEADD(month, 13, getDate()), '' , 'admin' )*/
update vehicle set cph = @Cph where ID = @VehID
end
我正在尝试将其转换为 MySQl 触发器
DROP TRIGGER IF EXISTS InsertVehTrig;
DELIMITER $$
CREATE TRIGGER InsertVehTrig AFTER INSERT
ON Vehicle FOR EACH ROW
SWL_return:
BEGIN
DECLARE Cph CHAR(50);
DECLARE DevID CHAR(12);
DECLARE VehID BIGINT;
DECLARE TmpID BIGINT;
DECLARE DevCount INT;
SET Cph = rtrim(ltrim(NEW.cph));
SET VehID = NEW.ID;
SET DevID = NEW.DevID;
if(VehID is null) then
select count(id) into @DevCount from vehicle where (cph=@Cph) or (DevID=@DevID);
-- 条件:当前的车牌号 或 设备ID
end if;
if (DevCount > 1) then -- 如果记录数,超过1,则认为有重复
-- Rollback not supported in trigger
SET @SWV_Null_Var = 0;
Leave SWL_return;
else
if (DevCount = 1) then
select ID INTO @TmpID from Vehicle where (Vehicle.cph = @Cph) or (Vehicle.DevID = @DevID);
if (TmpID != VehID) then -- --如果增加的车牌号码与数据库中的在相同的,则不允许增加
-- Rollback not supported in trigger
Leave SWL_return;
SET @SWV_Null_Var = 0;
end if;
end if;
end if;
update vehicle set cph = @Cph where ID = @VehID;
END;
问题
我
@
在变量之前使用是否正确?据我所知,SQL Server@
用作变量声明。但我不知道 MySQL 是否工作SQL Server 有
rollback tran
什么我应该为 MySQL 更改它?当我想取消插入数据的动作时,如何像rollback
在 MySQL 中那样替换?什么是
SET @SWV_Null_Var = 0;
意义?我没有看到这个变量的任何声明?这是什么?