读书人

触发器 IF NOT EXISTS 应用困惑解决思

发布时间: 2012-04-12 15:46:35 作者: rapoo

触发器 IF NOT EXISTS 应用困惑

SQL code
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      

请教各位大神,为啥我现在在本地测试插入新行,新上架字段不会更新呢!
到底是哪里逻辑出了问题呢!
是NOT EXISTS 用的不对么?

[解决办法]
SQL code
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 行受影响)****************************/
[解决办法]
SQL code
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 行受影响)*/ 

读书人网 >SQL Server

热点推荐