10 个解决方案
#1
不行吧,只能分两次更新,
如果更新之后会改变关联字段的值
可以先把关联字段缓存到临时表,再分别更新两个表
如果更新之后会改变关联字段的值
可以先把关联字段缓存到临时表,再分别更新两个表
#2
--SQL不支持这种更新
--可以用两句来更新
update a set 字段1='xx'
from a,b where a.关联字段=b.关联字段
update b set 字段2='xx'
from a,b where a.关联字段=b.关联字段
--可以用两句来更新
update a set 字段1='xx'
from a,b where a.关联字段=b.关联字段
update b set 字段2='xx'
from a,b where a.关联字段=b.关联字段
#3
这样算不算一条语句?
str="update a set col1=xxx from a join b on a.col0=b.col0 update b set col2=yyy from a join b on a.col0=b.col0"
conn.execute str
#4
--如果可以的话,楼主可以创建一个视图,然后利用视图来实现同时更新字段1,字段2
--下面是示例
--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'
create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go
--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go
--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段
--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go
--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go
--显示更新结果
select * from ta
select * from tb
go
--删除测试
drop table ta,tb
drop view v_ta_tb
/*--测试结果
关联字段 字段1
----------- ----------
1 XX
2 XX
(所影响的行数为 2 行)
关联字段 字段2
----------- ----------
1 YY
2 YY
(所影响的行数为 2 行)
--*/
--下面是示例
--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'
create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go
--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go
--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段
--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go
--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go
--显示更新结果
select * from ta
select * from tb
go
--删除测试
drop table ta,tb
drop view v_ta_tb
/*--测试结果
关联字段 字段1
----------- ----------
1 XX
2 XX
(所影响的行数为 2 行)
关联字段 字段2
----------- ----------
1 YY
2 YY
(所影响的行数为 2 行)
--*/
#5
--如果可以的话,楼主可以创建一个视图,然后利用视图来实现同时更新字段1,字段2
--下面是示例
--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'
create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go
--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go
--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段
--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go
--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go
--显示更新结果
select * from ta
select * from tb
go
--删除测试
drop table ta,tb
drop view v_ta_tb
/*--测试结果
关联字段 字段1
----------- ----------
1 XX
2 XX
(所影响的行数为 2 行)
关联字段 字段2
----------- ----------
1 YY
2 YY
(所影响的行数为 2 行)
--*/
--下面是示例
--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'
create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go
--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go
--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段
--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go
--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go
--显示更新结果
select * from ta
select * from tb
go
--删除测试
drop table ta,tb
drop view v_ta_tb
/*--测试结果
关联字段 字段1
----------- ----------
1 XX
2 XX
(所影响的行数为 2 行)
关联字段 字段2
----------- ----------
1 YY
2 YY
(所影响的行数为 2 行)
--*/
#6
多谢各位,已经搞定.分开写吧,不想专牛角尖了
#7
update table set col=condision
update后接的就是要更新的表但只能更新一个表?
但要想实现你要的功能,建议写在触发器里。
update后接的就是要更新的表但只能更新一个表?
但要想实现你要的功能,建议写在触发器里。
#8
直接用触发器不就行了吗?
#9
用触发器也可以呀
#10
接分
#1
不行吧,只能分两次更新,
如果更新之后会改变关联字段的值
可以先把关联字段缓存到临时表,再分别更新两个表
如果更新之后会改变关联字段的值
可以先把关联字段缓存到临时表,再分别更新两个表
#2
--SQL不支持这种更新
--可以用两句来更新
update a set 字段1='xx'
from a,b where a.关联字段=b.关联字段
update b set 字段2='xx'
from a,b where a.关联字段=b.关联字段
--可以用两句来更新
update a set 字段1='xx'
from a,b where a.关联字段=b.关联字段
update b set 字段2='xx'
from a,b where a.关联字段=b.关联字段
#3
这样算不算一条语句?
str="update a set col1=xxx from a join b on a.col0=b.col0 update b set col2=yyy from a join b on a.col0=b.col0"
conn.execute str
#4
--如果可以的话,楼主可以创建一个视图,然后利用视图来实现同时更新字段1,字段2
--下面是示例
--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'
create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go
--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go
--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段
--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go
--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go
--显示更新结果
select * from ta
select * from tb
go
--删除测试
drop table ta,tb
drop view v_ta_tb
/*--测试结果
关联字段 字段1
----------- ----------
1 XX
2 XX
(所影响的行数为 2 行)
关联字段 字段2
----------- ----------
1 YY
2 YY
(所影响的行数为 2 行)
--*/
--下面是示例
--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'
create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go
--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go
--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段
--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go
--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go
--显示更新结果
select * from ta
select * from tb
go
--删除测试
drop table ta,tb
drop view v_ta_tb
/*--测试结果
关联字段 字段1
----------- ----------
1 XX
2 XX
(所影响的行数为 2 行)
关联字段 字段2
----------- ----------
1 YY
2 YY
(所影响的行数为 2 行)
--*/
#5
--如果可以的话,楼主可以创建一个视图,然后利用视图来实现同时更新字段1,字段2
--下面是示例
--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'
create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go
--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go
--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段
--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go
--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go
--显示更新结果
select * from ta
select * from tb
go
--删除测试
drop table ta,tb
drop view v_ta_tb
/*--测试结果
关联字段 字段1
----------- ----------
1 XX
2 XX
(所影响的行数为 2 行)
关联字段 字段2
----------- ----------
1 YY
2 YY
(所影响的行数为 2 行)
--*/
--下面是示例
--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'
create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go
--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go
--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段
--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go
--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go
--显示更新结果
select * from ta
select * from tb
go
--删除测试
drop table ta,tb
drop view v_ta_tb
/*--测试结果
关联字段 字段1
----------- ----------
1 XX
2 XX
(所影响的行数为 2 行)
关联字段 字段2
----------- ----------
1 YY
2 YY
(所影响的行数为 2 行)
--*/
#6
多谢各位,已经搞定.分开写吧,不想专牛角尖了
#7
update table set col=condision
update后接的就是要更新的表但只能更新一个表?
但要想实现你要的功能,建议写在触发器里。
update后接的就是要更新的表但只能更新一个表?
但要想实现你要的功能,建议写在触发器里。
#8
直接用触发器不就行了吗?
#9
用触发器也可以呀
#10
接分