为何我的触发器不能创建!

yanhuizen 2005-03-30 11:13:28
我只有一张表不能创建触发器其它的工作正常我重新写过基表并重新用过不同的名字可就是不行,大伙谁见过这种怪现象,好急呀!
...全文
315 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanhuizen 2005-04-01
  • 打赏
  • 举报
回复
zjcxc(邹建) 真的非常感谢你关注我的贴子,我不行只好改用别的方法实现了,在此谢过各位仁兄
ma_yan_jun_78 2005-03-31
  • 打赏
  • 举报
回复
我学习帮你up
不知有人遇过此问题吗?
yanhuizen 2005-03-31
  • 打赏
  • 举报
回复
create TRIGGER gtProductInComU on tProductInCom
for update
AS
begin
declare @OldSubmitFlag bit,@NewSubmitFlag bit
declare @ID int,@DepotIn int
declare @NO nvarchar(20),@Maker nvarchar(20)

if Update(fSubmitFlag)
begin
select @OldSubmitFlag=fSubmitFlag from Deleted
select @NewSubmitFlag=fSubmitFlag from Inserted
if (@OldSubmitFlag=0) and (@NewSubmitFlag=1)
begin
Select @ID=fID,@DepotIn=isnull(fDepotIn,0),@NO=fNo,@Maker=fSubmitUser from Inserted
--插入仓库没的的产品
  Insert into tDepotTotal(fDepotID,fProductID)
Select @DepotIn,a.fResID
from tProductSub a
where a.fID=@ID and a.ResID Not in(Select fProductID from tDepotTotal where fDepotID=@DepotIn)
--更新仓库库存数量
  Update a Set a.fCurQty=a.fCurQty+b.fQty
from tDepotTotal a,tProductInSub b
where a.fProductID=b.fResID and b.fID=@ID and fDepotID=@DepotIn
--记仓库流水帐
Insert into tDepIO(fDepotID,fProductID,fDate,fName,fNO,fInQty,fBalQty,fPrePrice,fIOPrice,fMaker)
Select @DepotIn,a.fResId,Getdate(),'入库',@NO,a.fQty,b.fCurQty,c.fPrePrice,c.fPrePrice,@Maker
from tProductInSub a,tDepotTotal b,tBaseProduce c
where a.fID=@ID and b.fDeportID=@DepotIn and a.fResID=b.fProductID and a.fResID=c.fID

end
if (@OldSubmitFlag=1) and (@NewSubmitFlag=0)
begin
Select @ID=fID,@DepotIn=isnull(fDepotIn,0),@NO=fNo,@Maker=fSubmitUser from Inserted
--插入仓库没的的产品
  Insert into tDepotTotal(fDepotID,fProductID)
Select @DepotIn,a.fResID
from tProductSub a
where a.fID=@ID and a.ResID Not in(Select fProductID from tDepotTotal where fDepotID=@DepotIn)
--更新仓库库存数量
  Update a Set a.fCurQty=a.fCurQty-b.fQty
from tDepotTotal a,tProductInSub b
where a.fProductID=b.fResID and b.fID=@ID and fDepotID=@DepotIn
--记仓库流水帐
Insert into tDepIO(fDepotID,fProductID,fDate,fName,fNO,fInQty,fBalQty,fPrePrice,fIOPrice,fMaker)
Select @DepotIn,a.fResId,Getdate(),'入库(弃审)',@NO,a.fQty,b.fCurQty,c.fPrePrice,c.fPrePrice,@Maker
from tProductInSub a,tDepotTotal b,tBaseProduce c
where a.fID=@ID and b.fDeportID=@DepotIn and a.fResID=b.fProductID and a.fResID=c.fID
end



end




end


以上为我的触发器就是在别人的机子上能建上,我再还原回来还是不触发和没有一样不知什么问题
yanhuizen 2005-03-31
  • 打赏
  • 举报
回复
就是在查询分析器中点运行一直可以运行,而且提示成功完成,若触发器创建面功的话就不让再运行创建触发器的代码了不知理解我的意思没有
zjcxc 元老 2005-03-31
  • 打赏
  • 举报
回复
看不懂"并触发器可一直"成功"创建说明就没有建上"
heyixiang 2005-03-31
  • 打赏
  • 举报
回复
有意思,可惜这里不能贴图片,不然就方便多了。
yanhuizen 2005-03-31
  • 打赏
  • 举报
回复
没有错误提示,全部执行成功,并触发器可一直"成功"创建说明就没有建上
lxysjl 2005-03-31
  • 打赏
  • 举报
回复
学习
zjcxc 元老 2005-03-31
  • 打赏
  • 举报
回复
查病毒
装sql补丁
重新安装sql
yanhuizen 2005-03-31
  • 打赏
  • 举报
回复
就是见到这种怪事,在查询分析器中提示成功完成而实际上并没有创建,还有一个问题更怪就是在企业管理器中的管理触发器中你写上代码语法分析没错一点应用就自动全部清除所有代码而没有创建,这是真的出现在我机子上的事我不知什么原因??
zjcxc 元老 2005-03-31
  • 打赏
  • 举报
回复
不触发和不能创建是两码事,你到底是不能触发,还是不能创建?

如果是不能创建,给出错误提示,也检查一下,你登录的用户是否没有足够的权限

如果是不能触发,那你在触发器的as后面写一句:
select * from inserted

然后再在查询分析器中更新tProductInCom表的数据,看看有没有结果,如果是有结果集出现,说明是触发了,你所谓的不能触发,只是你的触发器代码没写好而已

如果是没有返回结果集,那就说明可能是禁用了触发器,尝试执行下面的语句来解决:
alter table tProductInCom enable trigger all
zjcxc 元老 2005-03-31
  • 打赏
  • 举报
回复
错误提示是什么?
zjcxc 元老 2005-03-31
  • 打赏
  • 举报
回复
触发器没创建? 那怎么又说执行语句成功呢?

看来我真是理解不了楼主在表达什么了
yanhuizen 2005-03-31
  • 打赏
  • 举报
回复
也许 zjcxc(邹建) 这们仁兄误解我的意思了,我指的是说明那个触发器就没有创建,这是一个很怪的问题,至于楼上这位仁兄,我数据库中就没有重名的表,我用别的名称建过这张表可是再建触发器还是一个样,我也重装过SQL server2000可问题就是存在,望大家看看是什么原因造成的,在此先谢过大家了
gzhughie 2005-03-31
  • 打赏
  • 举报
回复
我已前遇见过类似问题,后来查找原因,是由于我的数据库中出现的两个同名的表,一个是DBO所有,另一个是其他用户(假设为AAA)创建的,也就是说你的数据库上会出项DBO.tProductInCom和AAA.tProductInCom两个表,当你以AAA的身份登录创建触发器,你的触发器创建时又没有限制tProductInCom的所有着,那么数据库会默认的建立在AAA.tProductInCom这个表上,所以你的创建成功,但是你在DBO.tProductInCom上找不到你的触发器。

修改方法:
1.删除AAA.tProductInCom这张表,这样处理最保险,避免以后程序中数据操作的混淆,同时注意以后不论创建、修改数据对象的时候,在对象名称前面加入DBO.前缀,以免出现重名的现象。
2.修改创建触发器的语句的提头
create TRIGGER gtProductInComU on DBO.tProductInCom
for update
AS
……

zjcxc 元老 2005-03-31
  • 打赏
  • 举报
回复
"就是在查询分析器中点运行一直可以运行,而且提示成功完成
若触发器创建面功的话就不让再运行创建触发器的代码了"

这是很正常的表现嘛,已经创建了触发器,怎么能再创建同名的触发器呢? 你可以用alter trigger修改触发器


点点星灯 2005-03-30
  • 打赏
  • 举报
回复
在企业管理器中,表右击-->所有任务-->管理触发器-->写相应的SQL
点点星灯 2005-03-30
  • 打赏
  • 举报
回复
----------例如----------
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


CREATE TRIGGER InsertNewAffiche ON dbo.TAffiche
FOR INSERT
AS
declare @nNewId int
declare @nkey int
select @nNewId =id,@nkey= nkey from inserted
if @nkey=0
update TAffiche set nkey=@nNewId
where id=@nNewId


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
friendliu 2005-03-30
  • 打赏
  • 举报
回复
把代码和表的结构帖上来看瞃

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧