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后,在它的触发器中根据另一个普通表的查询行数来判断是否插入另一个表
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后,在它的触发器中根据另一个普通表的查询行数来判断是否插入另一个表
CREATE TRIGGER [ins_upd] ON [dbo].[btbs]
这块的btbs是手误还是你语句中的错误?
另外,我的tb2上有一个自增列,这个我想不需要(也不允许用)insert语句来写吧?
对了,我忘了说明,我是为了少打字,在发贴时,用的字段是英文的
在我实际数据库表中,表名是中文的,字段也是中文的
在我库中实际表名是:tb2="基本信息"
字段都是中文
d="编号"
dm="地名"
......
除了自增列列名为"id"而且我刚才又试了,我删除掉触发器,就能成功插入到btbs中去
2、两个表的字段对应是否正确?
3、从别的地方找找原因。
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
已经成功写进两个表去了,谢谢各位老师