还有你应该在set loginUserName=userName , 后面加个逗号....

解决方案 »

  1.   

    create table login(
       loginID int identity(1,1) primary key,
       loginUserName varchar(20) null unique,
       loginPwd varchar(20) null
    )go
    create table register
    (
       loginID int identity(1,1) foreign key references login(loginID),
       userName varchar(20) primary key,
       userTrueName varchar(20),
       userPwd varchar(15),
       userGender varchar(2),
       userBirthDate varchar(20),
       userProvince varchar(10),
       userCity  varchar(10),
       userEmail varchar(30),
       userRegisterDate datetime
       
       )
    gocreate trigger updateLogin
    on register
    for update
    as
    begin
    update login 
           set loginUserName=userName,
               loginPwd=userPwd
           where login.loginID=register.loginID
    end
    go
    当我执行的时候会出现以下错误信息:列前缀 'register' 与查询中所用的表名或别名不匹配。
      

  2.   

    create trigger updateLogin
    on register
    for update
    as
    begin
    update login 
           set loginUserName=(select userName from inserted where loginID = (select loginID from inserted)),
               loginPwd=(select userPwd from inserted where loginID = (select loginID from inserted))
           where login.loginID=(select (loginID) from inserted)
    end
    go
      

  3.   

    realtb(强悍的猪) ( ) 
    还是不能更新啊
      

  4.   

    我试过了,可以更新啊
    你是不是要 在 表 register 触发 update 的时候 更新 表 login ?
      

  5.   

    不考虑逻辑设计问题,你的语句大致应该写:update a
           set loginUserName=b.userName, loginPwd=b.userPwd
           from login as a inner join deleted as b
           on a.loginID=b.loginID写SQL Server的触发器,不管你是否想当然地认为“大概”只有一条记录更新,你的触发器逻辑都应该是针对多条记录修改时的情况去设计的。上面这个语句所在的触发器应该可以处理类似:
      update register set .....
        where .....
    这样针对多条记录进行修改的情况。否则,你的触发器第一条就应该写:
      if(@@rowcount>1) begin
        raiserror('不能处理多余1条记录修改。',16,1)
        rollback tran
      end似是而非的程序代码,反映程序员没有对负责任的产品的完整开发和维护过程有认识。
      

  6.   

    from login as a inner join deleted as b也许写为  from login as a inner join inserted as b更好。你的逻辑并没有看清楚。
      

  7.   

    --数据类型根据你的定义自己修改
    Declare @userName varchar(20),
            @userPwd varchar(20),
            @loginID int
    Select @loginID=loginID,@userName=userName,@userPwd=userPwd From inserted
    update login 
           set loginUserName=@userName
               loginPwd=@userPwd
           where login.loginID=@loginID
      

  8.   

    谢谢各位大侠
    我试过了,可以更新啊
    你是不是要 在 表 register 触发 update 的时候 更新 表 login ?
    是啊,我就是想把这个功能实现,也就是当我插入数据到注册表时,登陆表也能得到更新
      

  9.   

    用我上面那段代码不行吗?Update触发后,更新前的数据存放在Deleted临时表中,更新后的存在inserted临时表中,取到变量中结构清晰一些。