+ -
当前位置:首页 → 问答吧 → 触发器的参数怎么传不进去啊?

触发器的参数怎么传不进去啊?

时间:2007-05-30

来源:互联网

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   改为常量就可以正确判断。

作者: egooh   发布时间: 2007-05-30

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

作者: RunUpwind   发布时间: 2007-05-30

处理一下变量可能为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

作者: ivan_ren   发布时间: 2007-05-30

我一次只有一条语句啊.

作者: egooh   发布时间: 2007-05-30

大家帮我看看到底哪出了问题啊?感觉是   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没取到值。

作者: egooh   发布时间: 2007-05-31

很急哦,没人帮忙啊

作者: egooh   发布时间: 2007-05-31

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

作者: ZXL19871101   发布时间: 2010-12-17

SQL code
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 


作者: Dlut_LIuQ   发布时间: 2010-12-17

不明白长度为什么会产生这个问题
求解

作者: yy1987316   发布时间: 2010-12-17


3年前的帖子都能翻出来

作者: WaterGG   发布时间: 2010-12-17

引用 9 楼 watergg 的回复:
3年前的帖子都能翻出来

刚发现。。。

作者: yy1987316   发布时间: 2010-12-17


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

作者: xujinli88   发布时间: 2011-12-06