当前位置: 首页 > news >正文

仅作记录,游标,级联删除,获取所有该外键的表名

      以下内容只是部分原创,仅是之前收集到的知识。只做记录避免遗忘,具体出处已遗忘。

一、游标结构

   总是遗忘游标的结构

declare  PeriodDataCursor cursor 
for 
select  ID  , ClassTime  from  @temptable  order by [ClassTime]  desc 
open  PeriodDataCursor 
fetch next from  PeriodDataCursor  into  @ID , @firstClsTime
while(@@FETCH_STATUS=0)
begin 
 if((select top 1 1 from Mall_EverydayValue where  Summary='-初始化'  and InPeriod=@ID )=1)
 begin
   select   1  ;
 end
fetch next from  PeriodDataCursor  into   @ID , @firstClsTime
end
 close  PeriodDataCursor
 deallocate  PeriodDataCursor
end  

二、级联删除,更新

  

/*  
   drop table  test_sub
   drop table  test_main
   
   */ 

-- 创建测试主表. ID 是主键.
CREATE TABLE test_main 
( 
 id      INT   NOT NULL,  
 value   VARCHAR(10),  PRIMARY KEY(id) 
 ); 
 
  
-- 创建测试子表.
 CREATE TABLE test_sub 
 (  id      INT  NOT NULL, 
  main_id INT ,  value   VARCHAR(10),  PRIMARY KEY(id)
 );
 
 --创建外键,使用 ON DELETE CASCADE 选项,删除主表的时候,同时删除子表
 --   ON UPDATE CASCADE  级联更新
 ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id)  REFERENCES  test_main(id) 
  ON DELETE CASCADE   ON UPDATE CASCADE ;
 
    -- 插入测试主表数据.
    INSERT INTO test_main(id, value) VALUES (1, 'ONE');
    INSERT INTO test_main(id, value) VALUES (2, 'TWO'); 
    -- 插入测试子表数据.
    INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE');
    INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO');

--执行删除:

DELETE FROM TEST_MAIN WHERE ID = 1;
-- 执行更新:
update  TEST_MAIN set id=5 from  TEST_MAIN where id=2 ;

--   DELETE FROM test_sub WHERE ID = 1;
--最后:

SELECT * FROM TEST_MAIN;
SELECT * FROM test_sub;
--结果子表中就只有ID=5的记录,也就说明级联删除成功和更新成功。

三、获取该所有外键

SELECT 主键列ID=b.rkey 
    ,主键列名=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid) 
    ,外键表ID=b.fkeyid 
    ,外键表名称=object_name(b.fkeyid) 
    ,外键列ID=b.fkey 
    ,外键列名=(SELECT name FROM syscolumns WHERE colid=b.fkey AND id=b.fkeyid) 
    ,级联更新=ObjectProperty(a.id,'CnstIsUpdateCascade') 
    ,级联删除=ObjectProperty(a.id,'CnstIsDeleteCascade') 
FROM sysobjects a 
    join sysforeignkeys b on a.id=b.constid 
    join sysobjects c on a.parent_obj=c.id 
where a.xtype='f' AND c.xtype='U' 
    and object_name(b.rkeyid)='TEST_MAIN'

  

 

转载于:https://www.cnblogs.com/bkyrslf/p/6820687.html

相关文章:

  • Unity引擎GUI之Image
  • 实体框架(Entity Framework)简介
  • CEF之CefSettings设置日志等级
  • 数据库管理和应用
  • 2017第19周一
  • 关于jsp和html页面中的三种弹出框
  • 【前端页面优化】改善你的jQuery的25个步骤 千倍级效率提升
  • 大型网站架构技术一览
  • freebsd配置国内源
  • L1-012.计算指数
  • 中国(江苏)- 英国产业挑战合作计划推介会在省技术产权市场举办
  • android自己定义TextView
  • CSS3中transition-duration參数对hover前后两种过渡时间的影响
  • 使用squid架设自己的代理server
  • ionic异常记录
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • JavaScript类型识别
  • JavaScript设计模式与开发实践系列之策略模式
  • Logstash 参考指南(目录)
  • mysql常用命令汇总
  • MySQL几个简单SQL的优化
  • PHP的类修饰符与访问修饰符
  • SQLServer之索引简介
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vue小说阅读器(仿追书神器)
  • 代理模式
  • 简单数学运算程序(不定期更新)
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 扑朔迷离的属性和特性【彻底弄清】
  • 前端技术周刊 2019-01-14:客户端存储
  • 三分钟教你同步 Visual Studio Code 设置
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 如何用纯 CSS 创作一个货车 loader
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # C++之functional库用法整理
  • #include到底该写在哪
  • #QT(TCP网络编程-服务端)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (C++17) std算法之执行策略 execution
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core 中插件式开发实现
  • .Net Core和.Net Standard直观理解
  • .NET Framework 4.6.2改进了WPF和安全性
  • .Net mvc总结
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • /proc/vmstat 详解
  • @拔赤:Web前端开发十日谈
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [.NET 即时通信SignalR] 认识SignalR (一)