我的的触发器总会“无法绑定由多个部分组成的标识符 "PrjBasicInfo.ProjectIDYear"”,其中PrjBasicInfo为人工修改的表,其余的表自动更新。
或者有没有其他的办法可以实现,谢谢各位了!
各个表之间通过这一字段建立的联系。
8 个解决方案
#1
create trigger trig_tb1 on tb1 for update
as
begin
update tb2 set ProjectIDYear = i.ProjectIDYear from tb2 , inserted i where tb2.关键字 = i.关键字
update tb3 set ProjectIDYear = i.ProjectIDYear from tb3 , inserted i where tb3.关键字 = i.关键字
...
update tb18 set ProjectIDYear = i.ProjectIDYear from tb18 , inserted i where tb18.关键字 = i.关键字
end
as
begin
update tb2 set ProjectIDYear = i.ProjectIDYear from tb2 , inserted i where tb2.关键字 = i.关键字
update tb3 set ProjectIDYear = i.ProjectIDYear from tb3 , inserted i where tb3.关键字 = i.关键字
...
update tb18 set ProjectIDYear = i.ProjectIDYear from tb18 , inserted i where tb18.关键字 = i.关键字
end
#2
把代码贴出来看看
#3
如果是级联更新则参考如下:
create table 班级表(班级名 char(8),系部名 char(10),学制 int)
insert 班级表 values('天动一班','大气科学系',4)
insert 班级表 values('天动二班','大气科学系',4)
insert 班级表 values('天动三班','大气科学系',4)
insert 班级表 values('天动四班','大气科学系',4)
create table 学生表(学号 char(8),姓名 char(6),班级名 char(8))
insert 学生表 values('01980001','张一','天动一班')
insert 学生表 values('01980002','张二','天动一班')
insert 学生表 values('01980003','张三','天动一班')
insert 学生表 values('01980004','张四','天动二班')
insert 学生表 values('01980005','张五','天动二班')
insert 学生表 values('01980006','张六','天动三班')
insert 学生表 values('01980007','张七','天动四班')
CREATE TRIGGER [T1] ON 班级表
FOR UPDATE
AS
if update(班级名)
update a
set a.班级名 = (select 班级名 from inserted )
from 学生表 a join deleted b
on a.班级名 = b.班级名
go
update 班级表
set 班级名='自动化'
where 班级名 = '天动一班'
/*
更新前
学号 姓名 班级名
-------- ------ --------
01980001 张一 天动一班
01980002 张二 天动一班
01980003 张三 天动一班
01980004 张四 天动二班
01980005 张五 天动二班
01980006 张六 天动三班
01980007 张七 天动四班
更新后
学号 姓名 班级名
-------- ------ --------
01980001 张一 自动化
01980002 张二 自动化
01980003 张三 自动化
01980004 张四 天动二班
01980005 张五 天动二班
01980006 张六 天动三班
01980007 张七 天动四班
*/
#4
感谢1楼!
不能通过ProjectIDYear来建立联系么,很多表与被修改的表之间没有别的相同字段了
要不就修改数据表,加字段?
还有,那个i代表什么含义?菜鸟一个,不懂
不能通过ProjectIDYear来建立联系么,很多表与被修改的表之间没有别的相同字段了
要不就修改数据表,加字段?
还有,那个i代表什么含义?菜鸟一个,不懂
#5
ProjectIDYear就是你的关键字?
create trigger trig_tb1 on tb1 for update
as
begin
update tb2 set ProjectIDYear = (select ProjectIDYear from inserted) from tb2 where ProjectIDYear = (select ProjectIDYear from deleted)
其他表类似...
end
#6
谢谢,可以结贴啦~
最近做地调局项目,数据库特别乱,得重新整理,而我以前没有做过数据库,小白一个,一楼帮大忙了,十分感谢!
#7
if object_id('[tri]') is not null drop trigger tri
go
create trigger tri on tb
for update
as
begin
declare @id int , @sql varchar(100)
select top 1 @id=id from inserted
select @sql='exec sp_msforeachtable @command1=''update ? set ?.id='+ltrim(@id)+''',@whereand=''and o.name <>''''tb'''''''
exec(@sql)
end
自己改下对应值。
#8
囧。。。。 回复了一个已经结贴的。。。。。。。
#1
create trigger trig_tb1 on tb1 for update
as
begin
update tb2 set ProjectIDYear = i.ProjectIDYear from tb2 , inserted i where tb2.关键字 = i.关键字
update tb3 set ProjectIDYear = i.ProjectIDYear from tb3 , inserted i where tb3.关键字 = i.关键字
...
update tb18 set ProjectIDYear = i.ProjectIDYear from tb18 , inserted i where tb18.关键字 = i.关键字
end
as
begin
update tb2 set ProjectIDYear = i.ProjectIDYear from tb2 , inserted i where tb2.关键字 = i.关键字
update tb3 set ProjectIDYear = i.ProjectIDYear from tb3 , inserted i where tb3.关键字 = i.关键字
...
update tb18 set ProjectIDYear = i.ProjectIDYear from tb18 , inserted i where tb18.关键字 = i.关键字
end
#2
把代码贴出来看看
#3
如果是级联更新则参考如下:
create table 班级表(班级名 char(8),系部名 char(10),学制 int)
insert 班级表 values('天动一班','大气科学系',4)
insert 班级表 values('天动二班','大气科学系',4)
insert 班级表 values('天动三班','大气科学系',4)
insert 班级表 values('天动四班','大气科学系',4)
create table 学生表(学号 char(8),姓名 char(6),班级名 char(8))
insert 学生表 values('01980001','张一','天动一班')
insert 学生表 values('01980002','张二','天动一班')
insert 学生表 values('01980003','张三','天动一班')
insert 学生表 values('01980004','张四','天动二班')
insert 学生表 values('01980005','张五','天动二班')
insert 学生表 values('01980006','张六','天动三班')
insert 学生表 values('01980007','张七','天动四班')
CREATE TRIGGER [T1] ON 班级表
FOR UPDATE
AS
if update(班级名)
update a
set a.班级名 = (select 班级名 from inserted )
from 学生表 a join deleted b
on a.班级名 = b.班级名
go
update 班级表
set 班级名='自动化'
where 班级名 = '天动一班'
/*
更新前
学号 姓名 班级名
-------- ------ --------
01980001 张一 天动一班
01980002 张二 天动一班
01980003 张三 天动一班
01980004 张四 天动二班
01980005 张五 天动二班
01980006 张六 天动三班
01980007 张七 天动四班
更新后
学号 姓名 班级名
-------- ------ --------
01980001 张一 自动化
01980002 张二 自动化
01980003 张三 自动化
01980004 张四 天动二班
01980005 张五 天动二班
01980006 张六 天动三班
01980007 张七 天动四班
*/
#4
感谢1楼!
不能通过ProjectIDYear来建立联系么,很多表与被修改的表之间没有别的相同字段了
要不就修改数据表,加字段?
还有,那个i代表什么含义?菜鸟一个,不懂
不能通过ProjectIDYear来建立联系么,很多表与被修改的表之间没有别的相同字段了
要不就修改数据表,加字段?
还有,那个i代表什么含义?菜鸟一个,不懂
#5
ProjectIDYear就是你的关键字?
create trigger trig_tb1 on tb1 for update
as
begin
update tb2 set ProjectIDYear = (select ProjectIDYear from inserted) from tb2 where ProjectIDYear = (select ProjectIDYear from deleted)
其他表类似...
end
#6
谢谢,可以结贴啦~
最近做地调局项目,数据库特别乱,得重新整理,而我以前没有做过数据库,小白一个,一楼帮大忙了,十分感谢!
#7
if object_id('[tri]') is not null drop trigger tri
go
create trigger tri on tb
for update
as
begin
declare @id int , @sql varchar(100)
select top 1 @id=id from inserted
select @sql='exec sp_msforeachtable @command1=''update ? set ?.id='+ltrim(@id)+''',@whereand=''and o.name <>''''tb'''''''
exec(@sql)
end
自己改下对应值。
#8
囧。。。。 回复了一个已经结贴的。。。。。。。