原文:在论坛中出现的比较难的sql问题:10(删除多表中的同一个外键)


最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。

所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。

1、求助!SQLServer如何删除多表(10表以上)中的同一个外键。

http://bbs.csdn.net/topics/390633551

最近在做一个OA系统,用SQLServer2008数据库。系统里有个删除员工的功能,但是考虑到其他表中有员工表的外键,删除时应该将其他表中相关的记录全部删除,请问如何写语句?

比如员工表是OA_User,员工编号Uid,数据库中最少有10张表里有Uid外键,请问如何删除其他表中的相关记录?


  1. create table OA_User(Uid int primary key ,uname varchar(20))
  2. create table OA_tb
  3. (
  4. id int identity(1,1)primary key ,
  5. Uid int foreign key references OA_User(Uid) on delete cascade --级联删除
  6. )
  7. insert into OA_User
  8. values(1,'张三'),
  9. (2,'李四')
  10. insert into OA_tb
  11. values(1),(1),(1),(2),(1)
  12. --删除主表中udi 为2的记录,没有报错
  13. delete from oa_user where uid = 2
  14. --附表中的uid为2的记录,自动删除
  15. select * from oa_tb
  16. /*
  17. id Uid
  18. 1 1
  19. 2 1
  20. 3 1
  21. 5 1
  22. */

也可以通过图形化操作来实现:

2、统一改换查询出的字段。。这是不是想多了?

http://bbs.csdn.net/topics/390610092

能不能这样

select     A.* as A_* 

from QAQuestion Q 

inner join QAAnswer A ON A.QuestionID = Q.ID

简单地说,不想一个个地去给每个字段as别名

我如上去写只是打个比方。。实际运行不了的,想得到的查询结果是

A_字段1,A_字段2,A_字段3,A_字段4

有没有办法呢?

我的回复:

本质上来说,只有在sql server端,能把select a.* as a_*,也就是自动进行转换,才能支持。

因为在sql server端,你写的sql语句是各式各样的,要想实现你的A.* as A_*,实际上就是要改写查询,改为:

select a.字段1 as a_字段1,

       a.字段2 as a_字段2,

       a.字段3 as a_字段3,

from a

下面是通过动态语句来实现的:


  1. --先建个表
  2. select * into wc_table
  3. from sys.objects
  4. /*
  5. 要实现
  6. select a.* as a_*
  7. from wc_table
  8. 的效果
  9. */
  10. --动态生成语句为:
  11. declare @sql varchar(max);
  12. set @sql = '';
  13. select @sql = @sql + ',' + c.name + ' as A_' + c.name
  14. from sys.tables t
  15. inner join sys.columns c
  16. on t.object_id = c.object_id
  17. where t.name = 'wc_table'
  18. order by c.column_id
  19. set @sql = 'select ' +
  20. STUFF(@sql,1,1,'') +
  21. ' from wc_table A'
  22. select @sql
  23. /*
  24. 我把结果格式化了一下就是这样:
  25. SELECT name AS A_name,
  26. object_id AS A_object_id,
  27. principal_id AS A_principal_id,
  28. schema_id AS A_schema_id,
  29. parent_object_id AS A_parent_object_id,
  30. type AS A_type,
  31. type_desc AS A_type_desc,
  32. create_date AS A_create_date,
  33. modify_date AS A_modify_date,
  34. is_ms_shipped AS A_is_ms_shipped,
  35. is_published AS A_is_published,
  36. is_schema_published AS A_is_schema_published
  37. FROM wc_table A
  38. */
  39. exec(@sql)

发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

在论坛中出现的比较难的sql问题:10(删除多表中的同一个外键)的更多相关文章

  1. 在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)

    原文:在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  2. 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)

    原文:在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时.分钟计算问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ...

  3. 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)

    原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...

  4. 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)

    原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  5. 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)

    原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  6. 在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存)

    原文:在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  7. 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)

    原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...

  8. 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)

    原文:在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...

  9. 在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名)

    原文:在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

随机推荐

  1. http://man7.org/linux/man-pages/man2/epoll_wait.2.html

    https://segmentfault.com/a/1190000007240744 https://baike.baidu.com/item/Glibc http://man7.org/linux ...

  2. mvn创建flink项目

    使用如下项目骨架创建flink项目,结果被官方的下面这个创建方式坑了.. mvn archetype:generate \ -DarchetypeGroupId=org.apache.flink \ ...

  3. [转载]IBM公司发布了最新的power7服务器p750 p770 p780

    [转载]IBM公司发布了最新的power7服务器p750 p770 p780 (2015-06-11 12:54:17) 转载▼ http://blog.sina.com.cn/s/blog_6f52 ...

  4. PHP 输出日志到文件 DEMO

    首先需要确保输出文件有权限写入,一般设置权限为 chown -R nginx.nginx 输出的文件路径 如果以上方法还是无效,可以直接将文件设置有777,但是这种方式只能用于测试环境 chmod - ...

  5. Centos7 卸载 Nginx 并重新安装 Nginx

    1)  卸载nginx [root@locahost /]# yum remove nginx 2) 查看nginx是否还存在 [root@localhost /]# which nginx 3)重新 ...

  6. 泡泡一分钟:Topomap: Topological Mapping and Navigation Based on Visual SLAM Maps

    Topomap: Topological Mapping and Navigation Based on Visual SLAM Maps Fabian Bl¨ochliger, Marius Feh ...

  7. linux生成新的列(awk)

    awk的功能特别强大,其中一个功能就是生成新的列,不论这列是在第一列,最后一列,还是中间,随你任性插入. 举例来说,有下列文件test1.txt test1.txt a b c 1 2 3 现在我想在 ...

  8. (十三)class文件结构:常量池(转)

    Class类文件的结构 全局规范 1.任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件里(譬如类或接口也可以通过类加载器直接生成).本章中,只是通俗 ...

  9. 【kubernetes 自带监控】 container级别cadvisor+kubelet,集群级别apiserver

    apiserver https://feisky.gitbooks.io/kubernetes/components/apiserver.html kube-apiserver 支持同时提供 http ...

  10. 如何关闭phpstrom的更新提醒?

    在file-----setting-------搜索updates 把检测版本更新的对勾点掉就可以了, 自己破解后的版本就别更新了,更新后就不能再用了,目前用代理服务器激活可以用版本3.3,升级到3. ...