触发器问题

代码如下:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[INSERT_LOSS] ON [dbo].[REQUIREMENT] FOR INSERT AS
   SET NOCOUNT ON
   declare @part_id varchar(30),declare @scrap_percent decimal(6,2), @TYPE varchar(2)
begin
  if (update(part_id))
    begin
      select @part_id=part_id,@TYPE=WORKORDER_TYPE,@scrap_percent=case
                                       when @part_id like '301%' then '21.00'
                                       when @part_id like '302%' then '11'
                                       else '0'  from inserted
       if (@type='M')
       begin
       insert into [dbo].[REQUIREMENT] (part_id,scrap_percent) values(@part_id,@scrap_percent)
       end
    end
end
GO

提示出错信息:
消息 156,级别 15,状态 1,过程 INSERT_LOSS,第 4 行
关键字 'declare' 附近有语法错误。
消息 156,级别 15,状态 1,过程 INSERT_LOSS,第 11 行
关键字 'from' 附近有语法错误。

本人初学,实在看不出哪里错了,请高手帮忙。

作者: xxyoym   发布时间: 2011-10-15

else '0'  END from inserted

应该是这里少了个END

作者: oswica   发布时间: 2011-10-15

declare @part_id varchar(30),declare  
这里后面多了个declare。

作者: oswica   发布时间: 2011-10-15

按您说的这样改好之后,出现了这个错误:
消息 156,级别 15,状态 1,过程 INSERT_LOSS,第 11 行
关键字 'from' 附近有语法错误。

哪里还有问题吗?

作者: xxyoym   发布时间: 2011-10-15

我现在改为如下代码:
CREATE TRIGGER [dbo].[INSERT_LOSS] ON [dbo].[REQUIREMENT] FOR INSERT AS
   SET NOCOUNT ON
   declare @part_id varchar(30), @scrap_percent decimal(6,2), @TYPE varchar(2)
begin
  if (update(part_id))
    begin
      select @part_id=part_id,@TYPE=WORKORDER_TYPE from inserted
      select @scrap_percent=case
           when @part_id like '301%' then '21.00'
           when @part_id like '302%' then '11'
           else '0'  
    end
       if (@type='M')
       begin
       insert into [dbo].[REQUIREMENT] (part_id,scrap_percent) values(@part_id,@scrap_percent)
       end
end

提示出错信息:
消息 102,级别 15,状态 1,过程 INSERT_LOSS,第 18 行
'end' 附近有语法错误。

作者: xxyoym   发布时间: 2011-10-15

else '0'  
这里少个END

作者: oswica   发布时间: 2011-10-15

还是不行,纠结啊。

作者: xxyoym   发布时间: 2011-10-15

我现在改为这样了
create trigger insert_loss on dbo.REQUIREMENT for insert as
  declare @part_id varchar(40),@type varchar(2),@scrap_percent decimal(6,2)
if(update(part_id))
begin
   select @part_id=part_id,@type=workorder_type from inserted
   if @type='M'
   begin
      select @scrap_percent= case
           when @part_id like '301%' then '10.1'
           when @part_id like '302%' then '11'
           else '0'
   end
   insert into REQUIREMENT(scrap_percent) values(@scrap_percent) where part_id =@part_id
end
提示出错是这样的:
消息 156,级别 15,状态 1,过程 insert_loss,第 13 行
关键字 'where' 附近有语法错误。

作者: xxyoym   发布时间: 2011-10-15