sql server 如何同时更新两张有关系的表

sqlserver数据库中有两张表user和plan,u_loginname为user的主键。plan的p_loginname与user的u_loginname建立了外键联系,问题是当我对user表update时,sqlserver提示我违反了外键约束,不能更新。去除sqlserver中外键关系的insert和update强制约束后,user表可以更新但是plan表中的相关p_loginname并没有得到同时更新,想请问懂的的朋友,怎么样才能使他们一块更新?
我用的是sqlserver2005,谢谢!!

可以使用事务,但是只有当两张表都被更新了才会执行成功,否则事务回滚.
例如:
begin tran --开始执行事务
update bb set moneys=moneys-@momeys where ID=@fromID -执行的第一个操作,转账出钱,减去转出的金额
update bb set moneys=moneys+@momeys where ID=@toID --执行第二个操作,接受转账的金额,增加
if @@error<>0 --判断如果两条语句有任何一条出现错误
begin rollback tran –开始执行事务的回滚,恢复的转账开始之前状态
return 0
end
go
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-04-11
建立主外键关系的时候.选择级练更新 和级练删除.
以后你改动主表的时候 外键就会跟随着更新或删除
第2个回答  2008-04-11
之所以建立外键就是为了说明plan的数据以user数据为依据,你要修改user而不动plan当然不行了;
sql server的语法我不太清楚,不过可以给你两种方法:
1、去掉外键约束,update user之后紧接着update plan,不过这种方法明显不是你想要的;
2、分别建立user和plan的中间表,把修改后的数据先放到这两张数据表中,然后删除user和plan中的对应记录,最后把中间表的数据移过来并清除中间表
第3个回答  2008-04-11
你user表上创建一个更新触发器S_Update.
create trigger S_Update
on user
for update
as
declare @sNum=u_loginname
from update
update from plan
where u_loginname=@sNum

我写了这些代码,你看行不行.
第4个回答  2008-04-11
外键约束只是对表中取值的一种约束,要么为空,要么为主表中主键的取值.而你主表中更新子表是不会同步更新的!
所以你要创建一个触发器,让两张表同步更新!如何来做这个工作,正在学习中...
如果你只要更新,在外键约束里面选择级联更新,也就是INSERT和UPDATE规范中的更新规则.不过在2005里面好像不叫级联更新了,那是SQL Server2000中的说话,好像叫层叠,具体你看一下!本回答被提问者采纳

sql server 如何同时更新两张有关系的表
可以使用事务,但是只有当两张表都被更新了才会执行成功,否则事务回滚.例如:begin tran --开始执行事务 update bb set moneys=moneys-@momeys where ID=@fromID -执行的第一个操作,转账出钱,减去转出的金额 update bb set moneys=moneys+@momeys where ID=@toID --执行第二个操作,接受转账的...

sql可以两个表一起更新数据吗
如果两个表有关联的话是可以的,比如A表的id和b表的b_id外键关系就可以 update a left join b on a.id = b.b_id set a.name = '',b.name='' (where条件)

SQLSERVER中同时更新两表中的数据
如果没有一定的条件非要更新两张表,就用两个UPDATE语句好了,我还没有使用过单纯的直接更新,给你一个关联两个表的语句:UPDATE titles SET ytd_sales = titles.ytd_sales + sales.qty FROM titles, sales WHERE titles.title_id = sales.title_id AND sales.ord_date = (SELECT MAX(sales.or...

sqlserver如何同时更新多条数据记录?
1、首先打开sql server managment工具,设计一个数据表,如下图所示。2、然后往数据表中插入一些数据,如下图所示。3、接下来如果想更新某个记录的话,一般通过如下图所示的update语句进行更新。4、但是如果想一下同步多条记录的话,这种更新就不能满足了,如下图所示。5、然后就可以用update和case进行...

sql server 2008 怎么做到,同时更新两个表,两个表有主键关联
如果是用SQL语句建表,如下:(假设要让a和c组合作为主码)create table t1(a int,b varchar(20),c int,primary key(a,c))如果用图形化界面做,按住ctrl键,然后选择a和c两个列,接着右键菜单选择“设置为主键”即可。

SQL Server数据库多表关联如何更新?
一、MS SQL Server 多表关联更新 sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来。虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就可以在update的表达式 中引用要更新的表以外的其它数据。一般形式:update A SET 字段1=B表字段表达式...

有两个电脑都安装SQL server,都有一个相同的数据库,如何实现两个数据库...
SQL数据同步:利用数据库复制技术实现数据同步(同时)更新、复制等概念 说明 :复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据...

sql server2008,同一数据库里的两张不同的表怎么实现同步?
更新 create trigger up_table on aaa for update as if update(a1)or update(a2)begin update t2 set b1=t1.a1,b2=t1.a2 from inserted t1,bbb t2 where t1.aid=t2.bid end 插入 create trigger in_table on aaa for insert as insert into bbb(b1,b2)select a1,a2 from inserted end...

sql server 中怎么修改在两个表中有关联的数据?
两台服务器上的,2个 sql server 数据库?一台服务器上的两个不同的 sql server 数据库 很简单 比如你现在是 use test1 数据库,建立一个表,叫 testa 然后 use test2 数据库,建立一个表,叫 testb 那么要关联,就是 查询的时候,输入全路径 例如 select 检索字段 from test1.dbo.testa tes...

sql server触发器 两个数据库表同步更新
CREATE TRIGGER trigger_cgjh_insert ON [dbo].[cg_cgjh_bt]FOR INSERT AS BEGIN insert into openrowset('sqloledb','192.168.0.100';'sa';'10060','select * from knss2009.dbo.yw_kck') select * from yw_kck END 给你写过例子可以实现跨服务器跨库的语句吧,你那种方法没用过 你在...

相似回答