sql2005 触发器问题

我在数据库里,在表so_somain表中加了一个触发器,以下为触发器的内容,但在执行insert的时候无法触发还不知道触发了未成功,就是没有达到原有的效果,哪位大虾能帮忙... 我在数据库里,在表so_somain表中加了一个触发器,以下为触发器的内容,但在执行insert的时候无法触发还不知道触发了未成功,就是没有达到原有的效果,哪位大虾能帮忙解决下的,给于重分。
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER TRIGGER [TR_somain] ON [dbo].[SO_SOMain]
for insert
as
begin

declare @soid int,@id int, @wuliuid varchar(50),@csccode varchar(50),@ordercode varchar(50)

select @id=idnum from d_tableid where tablename='SO_SOMain'

select top (1) @soid=soid from SO_SOMain order by dDate desc

WHILE @soid<@id
BEGIN
SET @soid = @soid +1
SELECT @ordercode = cSOCode FROM SO_SOMain WHERE soid = @soid
select @wuliuid = cDefine1,@csccode = cSCCode from dispatchlist where cSOCode = @ordercode
update SO_SOMain set cDefine1 = @wuliuid,cSCCode = @csccode where soid = @soid
END
end
我来解释一下我的用处
当插入一条记录的时候,需要获取另一个表中的其中两个字段,把这两个字段更新至第一个表中,但程序是死的,不能修改,只能利用触发器来进行update了。

先定义一些变量
declare @soid int,@id int, @wuliuid varchar(50),@csccode varchar(50),@ordercode varchar(50)

取出参数表d_tableid 表中定义的值
select @id=idnum from d_tableid where tablename='SO_SOMain'

取出最后一条insert到SO_SOMain 表中的数据ID(自动增长)
select top (1) @soid=soid from SO_SOMain order by dDate desc

然后进行比对,看ID号相差多少,就说明当中有多少条数据(这是防止多人同时操作,同时插入数据。)
WHILE @soid<@id
BEGIN

变量@soid+1,相当于参数表取出的ID号增加一,这时应该于数据库中新记录的ID号相同了。
SET @soid = @soid +1
展开
 我来答
百度网友866da84
2009-06-18 · TA获得超过368个赞
知道小有建树答主
回答量:339
采纳率:0%
帮助的人:0
展开全部
语句好像没什么问题。不知道你要实现什么样的功能

SET @soid = @soid +1
这句是不是改放到update下面去哦!

--补充
提示下你这过程应该用到inserted表,不用这么复杂吧
还有把触发器改成after。
不然数据还没进去,就执行update。数据库表里就没反应了
ALTER TRIGGER [TR_somain] ON [dbo].[SO_SOMain]
after insert

时间来不急了。我得下班了。
如果明天早上还没解决。再帮你看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yanpuforever
2009-06-18 · TA获得超过371个赞
知道小有建树答主
回答量:600
采纳率:0%
帮助的人:0
展开全部
楼上说的对,
取出最后一条insert到SO_SOMain 表中的数据ID(自动增长)
select top (1) @soid=soid from SO_SOMain order by dDate desc
是不需要这样的,应该是
select @soid=soid from inserted
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式