帮忙看看这个触发器,急呀

phaqyxiao 2003-10-20 06:32:30
CREATE TRIGGER insertdetail ON [dbo].[m_group]
FOR Insert
AS
declare @pid int,@encashcode varchar(50),@productcode varchar(50),@gid int,@pcount int,@gidstr varchar(9)
declare @codelen int,@codelenstr varchar(1),@opstr varchar(500),@i int,@pidstr varchar(9)
select @pcount=i.productcount,@pid=i.productid,@gid=i.id
from inserted i,m_group d where i.productid=d.productid
Select @encashcode=smsproductcode,@productcode=productcode from m_product where productid=@pid
set @gidstr=@gid
set @pidstr=cast(@pid as varchar(9))
if @pcount>0
begin
/**********************/
declare @maxsequence int
declare @exestr varchar(500),@maxsequencestr varchar(9)
set @exestr='declare @maxsequence int select @maxsequence=isnull(max(productsequence),0) from detail_'+@pidstr
exec(@exestr)
if @maxsequence is null
set @maxsequence=0
/***************************/
set @codelen=len(@encashcode)
set @codelenstr=@codelen
set @maxsequence=@maxsequence+1
set @i=0
while @i<@pcount
begin
set @maxsequencestr=@maxsequence
set @opstr='insert detail_'+@pidstr +' values(' +@pidstr + ','''+@maxsequencestr+''','''+@codelenstr +@encashcode+@maxsequencestr+''','''+@productcode+''',1,null,null,1,'+@gidstr+')'
--print @opstr
exec(@opstr)
set @i=@i+1
set @maxsequence=@maxsequence+1
end
end
在两段注释中取max中得不到所要得最大值。
...全文
43 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
phaqyxiao 2003-10-21
  • 打赏
  • 举报
回复
谢谢以上几位的帮忙,我按pengdali的方法解决了。
txlicenhe 2003-10-20
  • 打赏
  • 举报
回复
1: /**********************/
declare @maxsequence int
declare @exestr nvarchar(500),@maxsequencestr varchar(9)
set @exestr=N'select @maxsequence=isnull(max(productsequence),0) from detail_'+@pidstr
exec sp_executesql @exestr,N'@maxsequence int output',@maxsequence output
if @maxsequence is null
set @maxsequence=0
/***************************/
2:
http://expert.csdn.net/Expert/topic/2364/2364046.xml?temp=.829693
[交流]动态SQL语句
qdubit 2003-10-20
  • 打赏
  • 举报
回复
赞同二楼的做法,请楼主试试吧。
pengdali 2003-10-20
  • 打赏
  • 举报
回复
关键:

/**********************/
declare @maxsequence int
declare @exestr nvarchar(500),@maxsequencestr varchar(9)
set @exestr=N'select @maxsequence=isnull(max(productsequence),0) from detail_'+@pidstr
exec sp_executesql @exestr,N'@maxsequence int output',@maxsequence output
if @maxsequence is null
set @maxsequence=0
/***************************/
pengdali 2003-10-20
  • 打赏
  • 举报
回复
CREATE TRIGGER insertdetail ON [dbo].[m_group]
FOR Insert
AS
declare @pid int,@encashcode varchar(50),@productcode varchar(50),@gid int,@pcount int,@gidstr varchar(9)
declare @codelen int,@codelenstr varchar(1),@opstr varchar(500),@i int,@pidstr varchar(9)
select @pcount=i.productcount,@pid=i.productid,@gid=i.id
from inserted i,m_group d where i.productid=d.productid
Select @encashcode=smsproductcode,@productcode=productcode from m_product where productid=@pid
set @gidstr=@gid
set @pidstr=cast(@pid as varchar(9))
if @pcount>0
begin
/**********************/
declare @maxsequence int
declare @exestr nvarchar(500),@maxsequencestr varchar(9)
set @exestr=N'select @maxsequence=isnull(max(productsequence),0) from detail_'+@pidstr
exec sp_executesql @exestr,N'@maxsequence int output',@maxsequence output
if @maxsequence is null
set @maxsequence=0
/***************************/
set @codelen=len(@encashcode)
set @codelenstr=@codelen
set @maxsequence=@maxsequence+1
set @i=0
while @i<@pcount
begin
set @maxsequencestr=@maxsequence
set @opstr='insert detail_'+@pidstr +' values(' +@pidstr + ','''+@maxsequencestr+''','''+@codelenstr +@encashcode+@maxsequencestr+''','''+@productcode+''',1,null,null,1,'+@gidstr+')'
--print @opstr
exec(@opstr)
set @i=@i+1
set @maxsequence=@maxsequence+1
end
end

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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