触发器 IF NOT EXISTS 应用困惑
if OBJECT_ID('tb')is not nulldrop table tbgocreate table tb(ID varchar(2),商品 char(20),条码 char(20),金额 int,新上架 char(2))insert into tb values ('1','洗发水','0124578104','20','')CREATE TRIGGER [tb-update] ON [dbo].[tb] FOR INSERT AS DECLARE @ID VARCHAR(2) BEGIN SELECT @ID=ID FROM INSERTED -- 当商品在tb表中不存在时,更新 新上架 字段-- 行级触发器,只更新 新增行数据 IF not EXISTS (SELECT A.商品 FROM INSERTED A INNER JOIN tb B ON A.商品=B.商品) UPDATE tb SET 新上架='是' FROM tb WHERE @ID=ID ENDCOMMIT create table tb(ID varchar(2),商品 char(20),条码 char(20),金额 int,新上架 char(2))goCREATE TRIGGER [tb-update] ON [dbo].[tb] instead of INSERT ASbeginDECLARE @ID VARCHAR(2) BEGIN SELECT @ID=ID FROM INSERTED -- 当商品在tb表中不存在时,更新 新上架 字段-- 行级触发器,只更新 新增行数据 IF not EXISTS (SELECT 1 FROM INSERTED A INNER JOIN tb B ON A.商品=B.商品) insert into tb select ID,商品,条码,金额,'是' FROM INSERTED WHERE @ID=ID elseinsert into tb select * from insertedENDendgo--testselect * from tbinsert into tb values ('1','洗发水','0124578104','20','')--selectselect * from tbdrop TRIGGER [tb-update]drop table tb/****************************ID 商品 条码 金额 新上架---- -------------------- -------------------- ----------- ----1 洗发水 0124578104 20 是(1 行受影响)****************************/
[解决办法]
if OBJECT_ID('tb')is not nulldrop table tbgocreate table tb(ID varchar(2),商品 char(20),条码 char(20),金额 int,新上架 char(2))if OBJECT_ID('[tb-update]','TR')is not null drop trigger [tb-update]goCREATE TRIGGER [tb-update] ON [dbo].[tb] FOR INSERT AS DECLARE @ID VARCHAR(2) BEGIN SELECT @ID=ID FROM INSERTED -- 当商品在tb表中不存在时,更新 新上架 字段-- 行级触发器,只更新 新增行数据 IF not EXISTS (SELECT A.商品 FROM INSERTED A INNER JOIN tb B ON A.商品=B.商品 and a.id!=b.id) /*加上id*/ UPDATE tb SET 新上架='是' FROM tb WHERE @ID=ID ENDinsert into tb values ('1','洗发水','0124578104','20','')select * from tb/*ID 商品 条码 金额 新上架---- -------------------- -------------------- ----------- ----1 洗发水 0124578104 20 是(1 行受影响)*/