跨库触发器表同步时update出错,其他正常,大家来诊断

echolife 2006-02-10 12:16:16
有数据库A,表user ,字段username,password,其它字段
数据库B,表user,字段username,userpass,其它字段
要求任一表user 插入、更改后,另一表同步修改

在库A表user中写触发器:

CREATE trigger [数据库A.tr_user] on [user]
for update,insert,delete
as
alter table 数据库B..[user] DISABLE TRIGGER [数据库B.tr_user]
-----------------------------------
if not exists (select * from deleted) --插入
insert 数据库B..[user](username,userpass,landtime) select username,password,lastlogin from inserted
else if not exists (select * from inserted)--删除
delete 数据库B..[user] where id in (select userid from deleted)
else--更新
update [user]
set
[user].username=数据库B..[user].username,
[user].userpass=数据库B..[user].password
from 数据库B..[user] as [user],inserted as 数据库B..[user] where [user].id=数据库B..[user].userid
alter table 数据库B..[user] ENABLE TRIGGER [数据库B.tr_user]

操作时提示:from 数据库B..[user] as [user],inserted as 数据库B..[user] where [user].id=数据库B.. 这行
'.'附近有语法错误
...全文
147 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
klan 2006-02-10
try:

CREATE trigger [数据库A.tr_user] on [user]
for update,insert,delete
as
alter table 数据库B..[user] DISABLE TRIGGER [数据库B.tr_user]
-----------------------------------
if not exists (select * from deleted) --插入
insert 数据库B..[user](username,userpass,landtime) select username,password,lastlogin from inserted
else if not exists (select * from inserted)--删除
delete 数据库B..[user] where id in (select userid from deleted)
else--更新
update [user]
set
[user].username=i.username,
[user].userpass=i.password
from 数据库B..[user] as [user],
inserted as i
where [user].id=i.userid
alter table 数据库B..[user] ENABLE TRIGGER [数据库B.tr_user]
回复
echolife 2006-02-10
对啊对啊, 本来按zlp321002萧萧的写法已经通过,我自作聪明,改成 如上的,结果调了一个上午都是'.'语法错误,
说来惭愧,偶从来没正规学过mssql ,都是即学即用的。楼上的各位功底都了得啊。
OK,给大家结分!
回复
OracleRoob 2006-02-10
from 数据库B..[user] as [user],inserted as 数据库B..[user] where [user].id=数据库B..[user].userid
------------------------------------------------
数据库B..[user]这种格式的别名是不合法的,可以改成其它的别名

我说的就是inserted的别名不能用 “数据库B..[user]”,可以使用任何其他合法的标识符,如楼上所说的i,或其他别名
回复
echolife 2006-02-10
wangtiecheng 给个合法的写法,这样我就给大家结贴给分了。
回复
echolife 2006-02-10
表名是 user, 如果不加 [user] 为报错。
以上问题已解决,错误在于:
update 后面的表名不要直接写,
这里 update 后的表 不要直接写 而是改成:
update a
set
a.username=i.username,
a.userpass=i.password
from 数据库B..[user] as a,
inserted as i
where a.id=i.userid
alter table 数据库B..[user] ENABLE TRIGGER [数据库B.tr_user]

以上的 a , i 不用改就行了,zlp321002萧萧 的做法是正确的。
地址:http://community.csdn.net/Expert/topic/4547/4547464.xml?temp=.5101129
回复
OracleRoob 2006-02-10
from 数据库B..[user] as [user],inserted as 数据库B..[user] where [user].id=数据库B..[user].userid
------------------------------------------------
数据库B..[user]这种格式的别名是不合法的,可以改成其它的别名


回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-02-10 12:16
社区公告
暂无公告