) gocreate trigger updateLogin on register for update as begin update login set loginUserName=userName, loginPwd=userPwd where login.loginID=register.loginID end go 当我执行的时候会出现以下错误信息:列前缀 'register' 与查询中所用的表名或别名不匹配。
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
不考虑逻辑设计问题,你的语句大致应该写: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似是而非的程序代码,反映程序员没有对负责任的产品的完整开发和维护过程有认识。
from login as a inner join deleted as b也许写为 from login as a inner join inserted as b更好。你的逻辑并没有看清楚。
--数据类型根据你的定义自己修改 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
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' 与查询中所用的表名或别名不匹配。
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
还是不能更新啊
你是不是要 在 表 register 触发 update 的时候 更新 表 login ?
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似是而非的程序代码,反映程序员没有对负责任的产品的完整开发和维护过程有认识。
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
我试过了,可以更新啊
你是不是要 在 表 register 触发 update 的时候 更新 表 login ?
是啊,我就是想把这个功能实现,也就是当我插入数据到注册表时,登陆表也能得到更新