跨库触发器表同步时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.. 这行
'.'附近有语法错误
...全文
220 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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]这种格式的别名是不合法的,可以改成其它的别名


22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧