关于外键约束的问题

aa43402614 2013-12-05 09:32:31
有2个表,表字段只有1个,为code varchar(100)。

表数据分别为
tb1:

code
111
222
333

tb2:

code
111
222
333

这两个表的code是外键约束。

现在我需要将两个表的code 都更新成第二位加个字符1.即:
tb1和tb2都为:

code
1111
2122
3133


我用update语句更新表的时候提示外键约束错误。
请问如何处理。
...全文
247 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2013-12-05
  • 打赏
  • 举报
回复
不建议使用外键约束. 先取消外键约束,然后更新数据.
LongRui888 2013-12-05
  • 打赏
  • 举报
回复
引用 6 楼 aa43402614 的回复:
小当家,我约束本来就是级联的 但是我更新主表可以成功。 但是更新附表的时候成功不了。报错,说是外键约束的错误。 你那个例子能给我更新一下附表吗
我刚才尝试用触发器,也实现不了。 所以我觉得,能不能把update tb2的语句修改为update tb1的语句,比如下面的:
update tb1
set code  = left(code,1)+'1' + SUBSTRING(code,2,LEN(code))
where tb1.code in (select code from tb2 where code ='要更新tb2的code')
LongRui888 2013-12-05
  • 打赏
  • 举报
回复
引用 6 楼 aa43402614 的回复:
小当家,我约束本来就是级联的 但是我更新主表可以成功。 但是更新附表的时候成功不了。报错,说是外键约束的错误。 你那个例子能给我更新一下附表吗
哦,这个级联更新,是针对,更新主表,那么自动更新附表的技术,但是不能倒过来,比如像你说的,如果更新附表,那么就会报错。 对了,你用的是sql server 2005不
aa43402614 2013-12-05
  • 打赏
  • 举报
回复
小当家,我约束本来就是级联的 但是我更新主表可以成功。 但是更新附表的时候成功不了。报错,说是外键约束的错误。 你那个例子能给我更新一下附表吗
Yole 2013-12-05
  • 打赏
  • 举报
回复

--设置外键约束  
  
ALTER TABLE [dbo].[TestDetail]  WITH CHECK  
  
ADD CONSTRAINT [FK_TestDetail_Test] FOREIGN KEY([TestID])  
  
REFERENCES [dbo].[Test]([TestID])  
  
ON  UPDATE CASCADE  --设置级联更新
  
GO 


LongRui888 2013-12-05
  • 打赏
  • 举报
回复
这个是效果:

--更新主表,不会报错
update tb1
set code  = left(code,2)+'1' + SUBSTRING(code,3,LEN(code))


select * from tb1
/*
code
1111
2212
3313
*/


--虽然没有更新附表,但是级联更新
select * from tb2
/*
code
1111
2212
3313
*/
LongRui888 2013-12-05
  • 打赏
  • 举报
回复
这里tb1是主表,tb2是附表,通过修改tb2的外键,选择update的“级联”就可以:





最后需要保存一下,就可以实现你的需求了
LongRui888 2013-12-05
  • 打赏
  • 举报
回复
建议你用级联更新,设置一下就好了
Landa_Peter 2013-12-05
  • 打赏
  • 举报
回复
 update tab1 set code=LEFT(code,1)+'1'+RIGHT(code,3)
 update tab2 set code=LEFT(code,1)+'1'+RIGHT(code,3)
發糞塗牆 2013-12-05
  • 打赏
  • 举报
回复
反向级联??

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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