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 展开
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 展开
2个回答
展开全部
语句好像没什么问题。不知道你要实现什么样的功能
SET @soid = @soid +1
这句是不是改放到update下面去哦!
--补充
提示下你这过程应该用到inserted表,不用这么复杂吧
还有把触发器改成after。
不然数据还没进去,就执行update。数据库表里就没反应了
ALTER TRIGGER [TR_somain] ON [dbo].[SO_SOMain]
after insert
时间来不急了。我得下班了。
如果明天早上还没解决。再帮你看
SET @soid = @soid +1
这句是不是改放到update下面去哦!
--补充
提示下你这过程应该用到inserted表,不用这么复杂吧
还有把触发器改成after。
不然数据还没进去,就执行update。数据库表里就没反应了
ALTER TRIGGER [TR_somain] ON [dbo].[SO_SOMain]
after insert
时间来不急了。我得下班了。
如果明天早上还没解决。再帮你看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询