CREATE TRIGGER [ins_upd] ON [dbo].[btbs] 
FOR INSERT
AS
begin
declare @d varchar(100) 
declare @c varchar(100)
declare @s varchar(20)
declare @dm varchar(50)
declare @row int
select @d=bh,@c=name,@s=num,@dm=addr from inserted //从inserted表中取值赋给触发器变量select @row=count(*) from tb2 where d=@d and dm=@dm //根据inserted的值查询另一个表tb2
if(@row=0)//如果返回行数为0
insert into tb2 values(@d,@c,@s,@dm)//插入tb2数据
end
上边的代码,如果我在tbbs上取消掉触发器,就可以成功的insert到tbbs中,加上后,就没有插入,同时触发器中的tb2插入也没不运行,请指教,如何在btbs被insert后,在它的触发器中根据另一个普通表的查询行数来判断是否插入另一个表

解决方案 »

  1.   

    另外:
    CREATE TRIGGER [ins_upd] ON [dbo].[btbs] 
    这块的btbs是手误还是你语句中的错误?
      

  2.   

    没有呀,整个数据库上就这一个触发器
    另外,我的tb2上有一个自增列,这个我想不需要(也不允许用)insert语句来写吧?
      

  3.   

    btbs有什么问题吗???
    对了,我忘了说明,我是为了少打字,在发贴时,用的字段是英文的
    在我实际数据库表中,表名是中文的,字段也是中文的
      

  4.   

    对不起,我写贴吧的手误,应该是btbsinsert into tb2 values(@d,@c,@s,@dm)//插入tb2数据 
    在我库中实际表名是:tb2="基本信息"
    字段都是中文
    d="编号"
    dm="地名"
    ......
    除了自增列列名为"id"而且我刚才又试了,我删除掉触发器,就能成功插入到btbs中去
      

  5.   

    1、楼主用的是FOR INSERT,不至于btbs的数据没插进去。
    2、两个表的字段对应是否正确?
    3、从别的地方找找原因。
      

  6.   

    用我这个试试。CREATE TRIGGER [ins_upd] ON [dbo].[btbs] 
    FOR INSERT 
    AS 
    begin 
    -- declare @d varchar(100) 
    -- declare @c varchar(100) 
    -- declare @s varchar(20) 
    -- declare @dm varchar(50) 
    -- declare @row int 
    --modify
    set nocount on
    if not exists(select 1 from tb2,inserted where tb2.d=inserted.bh and tb2.dm=inserted.addr insert  tb2(除了自增字段的字段列表) select bh,[name],num,addr from inserted
    end 
      

  7.   

    是的,是的,谢谢各位老师,正是这个name出了问题
    已经成功写进两个表去了,谢谢各位老师