sqlserver 触发器在“*”号附近有语法错误 5
触发器的功能主要是当向ICM表插入数据时自动从SEO表上获取对应的信息。代码如下:createtriggerICMrpResult_insert13onICMrpResu...
触发器的功能主要是当向ICM表插入数据时自动从SEO表上获取对应的信息。代码如下:
create trigger ICMrpResult_insert13
on ICMrpResult
after insert
as
declare
@iFOrgEntyrID int,--ICM表上SEO表外键之一
@iFPlanOrderInterID int,--ICM表的主键
@iFOrgSaleInterID int,--ICM表上SEO表的外键之一
@sFNote varchar(255),--SEO表的备注
@c int,--记录行数
@n int,
@sr nvarchar(800);--由于参数问题,需要把要运行的sql语言放到参数@sr上
set @c=(select count(FPlanOrderInterID) from ICMrpResult)
set @n=(select count(FPlanOrderInterID) from Inserted)--从inserted表上得知插入了多小行数据
while @n>0
--@iFType smallint;--是否有进行过mrp计算
--select @iFType=FType from Inserted
--if(@iFType='1')
begin
set @sr='select top 1 @iFPlanOrderInterID=FPlanOrderInterID from ICMrpResult
where FPlanOrderInterID not in ( select top '+ cast(@c-@n as char(3))+ ' FPlanOrderInterID from ICMrpResult order by FInterID)'
---------运行参数@sr里的sql语言。获取ICM表倒数第n行的主键
EXECUTE SP_EXECUTESQL @sr,N'@iFPlanOrderInterID int output',@iFPlanOrderInterID output
---------------
select @iFOrgSaleInterID=FOrgSaleInterID,@iFOrgEntyrID=FOrgEntyrID from ICMrpResult where FPlanOrderInterID=@iFPlanOrderInterID;
select @sFNote=FNote from SEOrderEntry where convert(char(20),FInterID)+convert(char(20),FEntryID)in(convert(char(20),@iFOrgSaleInterID)+convert(char(20),@iFOrgEntyrID));
update ICMrpResult
set
FHeadSelfj0548=@sFNote from ICMrpResult where FPlanOrderInterID=@iFPlanOrderInterID;
set @n=@n-1;
end
当运行的时候就提示“在“*”处发现语法错误”,然后插入数据终止 展开
create trigger ICMrpResult_insert13
on ICMrpResult
after insert
as
declare
@iFOrgEntyrID int,--ICM表上SEO表外键之一
@iFPlanOrderInterID int,--ICM表的主键
@iFOrgSaleInterID int,--ICM表上SEO表的外键之一
@sFNote varchar(255),--SEO表的备注
@c int,--记录行数
@n int,
@sr nvarchar(800);--由于参数问题,需要把要运行的sql语言放到参数@sr上
set @c=(select count(FPlanOrderInterID) from ICMrpResult)
set @n=(select count(FPlanOrderInterID) from Inserted)--从inserted表上得知插入了多小行数据
while @n>0
--@iFType smallint;--是否有进行过mrp计算
--select @iFType=FType from Inserted
--if(@iFType='1')
begin
set @sr='select top 1 @iFPlanOrderInterID=FPlanOrderInterID from ICMrpResult
where FPlanOrderInterID not in ( select top '+ cast(@c-@n as char(3))+ ' FPlanOrderInterID from ICMrpResult order by FInterID)'
---------运行参数@sr里的sql语言。获取ICM表倒数第n行的主键
EXECUTE SP_EXECUTESQL @sr,N'@iFPlanOrderInterID int output',@iFPlanOrderInterID output
---------------
select @iFOrgSaleInterID=FOrgSaleInterID,@iFOrgEntyrID=FOrgEntyrID from ICMrpResult where FPlanOrderInterID=@iFPlanOrderInterID;
select @sFNote=FNote from SEOrderEntry where convert(char(20),FInterID)+convert(char(20),FEntryID)in(convert(char(20),@iFOrgSaleInterID)+convert(char(20),@iFOrgEntyrID));
update ICMrpResult
set
FHeadSelfj0548=@sFNote from ICMrpResult where FPlanOrderInterID=@iFPlanOrderInterID;
set @n=@n-1;
end
当运行的时候就提示“在“*”处发现语法错误”,然后插入数据终止 展开
1个回答
展开全部
--您写的触发器没有什么问题,唯一可能出现问题的地方是下面的语句,一般是脏数据造成的
select @sFNote=FNote
from SEOrderEntry
where convert(char(20),FInterID)
+convert(char(20),FEntryID)
in(
convert(char(20),@iFOrgSaleInterID)
+convert(char(20),@iFOrgEntyrID)
);
--一般ERP里不推荐用触发器解决
更多追问追答
追问
如果这样的话有什么方法可以实现这个功能
追答
用存储过程进行封装比较安全,并且纠错比较容易,不会出现找不到错误原因的情况
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询