A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张恒维 中级黑马   /  2012-6-19 23:27  /  1544 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有 A B两表

A 表

  编号 姓名
------------------
  1 张三
  2 李四

B表

  id(主) 编号 成绩
-------------------------
  1 1 80
  2 2 90

我现在想删除A表里的记录 如果B表里有它的相关记录则不能删除,因为在C#里用 所以想只用一条SQL语句 发给数据库 请教。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

4 个回复

正序浏览
呵呵,这个多简单啊,不用sql语句,直接C#写方法啊,你先读取表,然后判断b表有没有这个数据,如果没有就执行删除语句,有的话就不执行

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
MSSQL SERVER数据库默认的情况下主外键表的级联删除是关闭的,因此在你删除主键表记录的情况下如果外键表存在与之相关联的信息,它会回滚操作并且报错,这种情况下楼主只需要在程序捕获异常就行了不需要再去判断B表是否有记录

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
伪代码:
     查询B表, 看有没有A表中的 编号信息,
     有则需要删除. 然后再删除A表中的信息;
     如果没有那么直接删除A表的信息,

在执行删除A表数据之前, 先判断一下B表的情况就可以吧   

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
我试过这个,但是执行不了:
delete from A where A.编号 = '1' and ((delete from B where B.编号='1')<>-1)
是级联问题,所以你可以考虑增加级联删除功能,这样只用操作一个表就行了,下面网页有讲的
http://blog.163.com/chinagujing@yeah/blog/static/170937439201092264742496/

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马