CREATE TRIGGER yin_inert_icitem ON  [dbo].[t_ICItem]
FOR INSERT, UPDATE
AS
  declare @fbatchmanager int 
select @fbatchmanager=fbatchmanager
from inserted
if @fbatchmanager<>1
begin 
   RAISERROR ('物料必须启用批次管理,否则不能保存',
      16, 1)
    rollback
end触发器的作用是启到了,可是提示的信息是:输入的数据超出范围,请重新输入.
并没有按我定义的提示信息:物料必须启用批次管理,否则不能保存,不知道是什么问题

解决方案 »

  1.   

    bu ke neng. shen me di fang tiao chu de ti shi xing xi??
      

  2.   

    你确定是触发器rollback ????
      

  3.   

    CREATE TRIGGER yin_inert_icitem ON  [dbo].[t_ICItem] 
    FOR INSERT, UPDATE 
    AS 
      declare @fbatchmanager int  
    select @fbatchmanager=fbatchmanager 
    from inserted 
    if @fbatchmanager <>1 
    begin  
       RAISERROR ('物料必须启用批次管理,否则不能保存',16, 1) 
        rollback 
    end 
    --
    如果确定是触发器这里出了问题,那么请确保下面正确
    declare @fbatchmanager int  
    select @fbatchmanager=fbatchmanager 
    from inserted 
    也就是说fbatchmanager 是否越界
      

  4.   

    如何判断fbatchmanager 是否越界
      

  5.   

    应该是在约束层面就出错了,
    如你定义 a varchar(5) 而你插入了6个长度的串。应该不是触发器
      

  6.   

    RAISERROR
    返回用户定义的错误信息并设系统标志,记录发生错误。通过使用 RAISERROR 语句,客户端可以从 sysmessages 表中检索条目,或者使用用户指定的严重度和状态信息动态地生成一条消息。这条消息在定义后就作为服务器错误信息返回给客户端。语法
    RAISERROR ( { msg_id | msg_str } { , severity , state }
        [ , argument [ ,...n ] ] )
        [ WITH option [ ,...n ] ]
      

  7.   

    select @fbatchmanager=fbatchmanager 
    from inserted 你可以看一下fbatchmanager 值是多少啊,估计你说的提示是其他触发器的提示,或是RAISERROR ('物料必须启用批次管理,否则不能保存', 16, 1)   之前的错误提示,而不是用户自己写的提示你这写的是金蝶K3的不?呵呵。
      

  8.   

    fbatchmanager 的值不是0就是1