CREATE  TRIGGER  ycqkcl
ON  dbo.swxx  
FOR  INSERT
AS  
           BEGIN  
                     declare  @sfzh varchar  
                SELECT  @sfzh =s_sfzh  FROM  INSERTED  
                           IF  EXISTS(SELECT  *  FROM  tjl  WHERE  sfzh=@sfzh)  
                           INSERT  INTO  ycqk (y_wid,y_sid,y_sfzh)  select  s_wid,s_id,s_sfzh from inserted   
           END
好象 @sfzh传输没法传入,大家帮我看看错误在哪里?我把SELECT  *  FROM  tjl  WHERE  sfzh=@sfzh 中的@sfzh 改为常量就可以正确判断。

解决方案 »

  1.   

    你每次插入几条记录,注意当一次插入多条记录时,触发器只执行一次,@sfzh的值是最后一条插入的值。
      

  2.   

    处理一下变量可能为null的情况
    CREATE  TRIGGER  ycqkcl
    ON  dbo.swxx  
    FOR  INSERT
    AS  
               BEGIN  
                         declare  @sfzh varchar 
                          set @sfzh=''
                    SELECT  @sfzh =s_sfzh  FROM  INSERTED  
                               IF  EXISTS(SELECT  *  FROM  tjl  WHERE  sfzh=@sfzh)  
                               INSERT  INTO  ycqk (y_wid,y_sid,y_sfzh)  select  s_wid,s_id,s_sfzh from inserted   
               END
      

  3.   

    大家帮我看看到底哪出了问题啊?感觉是 SELECT  @sfzh =s_sfzh  FROM  INSERTED 这句中@sfzh取值不正确,后面的 INSERT  INTO  ycqk (y_wid,y_sid,y_sfzh)  select  s_wid,s_id,s_sfzh from inserted   值能够正确取到,我将 IF  EXISTS改为 IF not EXISTS 这样值能正确插入,不过这个时候其实是SELECT  *  FROM  tjl  WHERE  sfzh=@sfzh永远不存在,因为@sfzh没取到值。
      

  4.   

    你先看看你的Declared声明的Varchar的大小,如果默认的话,好像等于Varchar(1)吧。
      

  5.   

    CREATE     TRIGGER     ycqkcl 
    ON     dbo.swxx     
    FOR     INSERT 
    AS     
    BEGIN     
         declare     @sfzh   varchar(100)  -- varchar默认是varchar(1)长度不够  
         SELECT     @sfzh   =s_sfzh     FROM     INSERTED     
         IF EXISTS(SELECT     *     FROM     tjl     WHERE     sfzh=@sfzh)     
            INSERT INTO ycqk (y_wid,y_sid,y_sfzh)     
            select s_wid,s_id,s_sfzh   from   inserted       
    END 
      

  6.   


    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO-- ============================================
    -- Author: xujinli
    -- Create date: 2011-12-6
    -- Description: 修改的触发器(如果子表有的话就修改数据,如果没有的话就添加一个新的数据)
    -- ============================================alter TRIGGER UpdateLo
       ON  dbo.UserInfo
    for update,insert
    AS 
    BEGIN
    begin  transaction /*开始事务*/
    if not exists(select * from dbo.UserLogin,inserted where inserted.id=UserLogin.userid)
    begin
     insert into  UserLogin (LoginName,Password,userid) select LoginName,Password,id from inserted
    end
    else
    begin
    declare @temp nvarchar(50)/*声明一个参数*/
    set @temp=(select id from inserted)/*利用这一步可以指定对userid进行定位,但这里虽然声明了,但是没有进行操作*/
    update dbo.UserLogin  set LoginName=b.LoginName ,Password=b.Password from dbo.UserLogin a, inserted b
    where a.userid=b.id
    end commit  transaction  /*提交事务*/
    END
    GO