表a(aid,aname)
表b(bid,bname,aname)
插入b数据时,怎么用触发器判断a表中有aname这个数据?create trigger trib
on b
for insert
as 
if exists (select aname from a where aname=)这个后面我就不知道怎么搞定了

解决方案 »

  1.   


    create trigger trib on b instead of insert
    as
        insert into b select * from inserted t where exists(select 1 from a where aname=t.aname)
      

  2.   

    create trigger trib
    on b
    for insert
    as 
    if exists (select 1 from inserted as i join a on i.aname=a.aname)
    ...
      

  3.   

    create table a(id int,aname varchar(10))
    insert into a select 1,'a'
    go
    create table b(id int,bname varchar(10),aname varchar(10))
    go--创建触发器只插入aname在表a中存在的。。
    create trigger trib on b instead of insert
    as
        insert into b select * from inserted t where exists(select 1 from a where aname=t.aname)
    go
    --插入测试
    insert into b select 1,'sdfsad','a'
    insert into b select 2,'xx','b'--查询
    select * from b
      

  4.   

    insert into b select * from inserted t where exists(select 1 from a where aname=t.aname)
    go---
    这句没看懂那个中间的t是什么意思啊?翻译一下:向表b中添加数据,添加的数据是:
    select * from inserted--(一个系统的保存临时插入数据表)
    t?
    where exists(select 1 from a where aname=t.aname)存在的1行当aname=t.aname时...t是不是inserted的别名啊?
      

  5.   

    create trigger trib
    on b
    for insert
    as 
    declare @s nvarchar(100)
    select @s=aname from inserted
    if not exists (select aname from a where aname=@s)
    delete from a where aname=@s哈哈,搞定了
      

  6.   

    create trigger trib
    on b
    for insert
    as 
    declare @s nvarchar(100)
    select @s=aname from inserted
    if not exists (select aname from a where aname=@s)
    delete from a where aname=@s哈哈,搞定了
      

  7.   

     inserted t是不是和table t类似呀?
    我是这样认为的
    呵呵
      

  8.   

    instead of insert 和 for insert 有什么区别阿?
      

  9.   

    呜呜呜,这个没有搞定,用pt1314917那个可以搞定,为什么?我把for insert改成instead of insert 也不行,到底是哪里出现问题了,奇怪哦!
      

  10.   

    INSTEAD OF指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。
      

  11.   

    to GDC_ZhaoYZ0304360:
       那和for insert有什么区别呢?还是不是懂...
      

  12.   

    for 指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发
      

  13.   

    to GDC_ZhaoYZ0304360: 
       哦!我明白了!可是我写的那个有错吗?为什么没有执行?不解!继续再看看
      

  14.   

    楼主是不是不想让aname字段有重复值?可以建一个约束,约束调用函数,函数返回是否有值....
      

  15.   

    to yinqi025:
        不是哦!不好意思哦!
      

  16.   

    --inserted表为插入记录表
    create trigger trib 
    on b 
    for insert 
    as  
    if exists (select aname from a,inserted b where a.aname=b.aname) 
      

  17.   

    to cxmcxm:
        这个不行哦,注意楼上讲的for和instead of的区别。
        
        用这个会插入三条记录,
          insert into b select 1,'sdfsad','a'
          insert into b select 1,'sdfsad','a'
          insert into b select 2,'xx','b'    正好验证了 楼上讲的for和instead of的区别