请问怎么更新有外键的两个表?

公共马甲0315 2013-08-20 05:08:17
表tb_A (nIndex,szNumber,...)
表tb_B (nIndex,szNumber,...)
其中只有szNumber是外键关联的,但都不是两者的主键哈!主键是nIndex,自增长的。
希望完成这样的功能,同时删除或插入一条信息到两个表中。
insert into tb_A(szNumber) values('03895678')
insert into tb_B(szNumber) values('03895678')
单独执行不可以,提示有约束冲突,怎么能合并成一条语句呢?

希望不要用存储过程,因为我是要在C++里面调用的......
...全文
351 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
公共马甲0315 2013-08-21
  • 打赏
  • 举报
回复
看来确实好麻烦。。。最后还是决定把外键关联删除了,自己来手动维护。。。 感谢各位回复
---涛声依旧--- 2013-08-21
  • 打赏
  • 举报
回复
如果没有级联更新或删除的话,删除时须删除子表的再删除主表的 如果有级联则只更新或删除主表其了表记录会自动相应地更新或删除
习惯性蹭分 2013-08-20
  • 打赏
  • 举报
回复

begin tran
alter table tab_A nocheck constraint fk;
insert into tb_A(szNumber) values('03895678')
insert into tb_B(szNumber) values('03895678')
alter table tab_B check constraint fk
commit tran
把fk换成你表的外键名。
Shawn 2013-08-20
  • 打赏
  • 举报
回复
#1.报什么错?是因为你没往主表添加主键记录吧:03895678 #2.2个INSERT不可能写成一个SQL,只能放到一个事务里,作为一个整体。 BEGIN TRAN insert into tb_A(szNumber) values('03895678') insert into tb_B(szNumber) values('03895678') COMMIT TRAN #3.没自动修复功能。自己写SQL查询处理。
INSERT INTO tb1
(
	field1,field2
)
SELECT field1,field2 FROM tb2 b
WHERE not EXISTS
(
	SELECT 1
	FROM tb2 a
	WHERE a.szNumber = b.szNumber
)

INSERT INTO tb2
(
	field1,field2
)
SELECT field1,field2 FROM tb1 a
WHERE not EXISTS
(
	SELECT 1
	FROM tb2 b
	WHERE a.szNumber = b.szNumber
)
公共马甲0315 2013-08-20
  • 打赏
  • 举报
回复
再比如说,扫描数据库发现有错误,比如tb_A和tb_B里面的记录行数目不一致时,我需要手动给其中一个插入一条缺失的但是另一个表中存在的数据,又该怎么弄呢?或者是SQL server有自动修复的功能呢?

34,588

社区成员

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

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