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

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

一、游标结构

总是遗忘游标的结构

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 [email protected] )=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‘

  

时间: 2024-11-11 04:38:07

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

删除带外键的表【foreign key constraint fails】报错

title: 删除带外键的表[foreign key constraint fails]报错 date: 2018-08-02 21:59:06 tags: 数据库 --- 遥想当时正在学hibernate的时候,刚好学到了一对多,多对多的关联操作.时间也正是刚好在那是有了一个项目,把各表的间的结构还理清,俗话说学到就要用到,就把这些表的结构都能配置级联关系的都把它配上.没想到就在这里给自己放了个小坑.前几天在一个帖子中看到别人说,尽量少配些ORM约束,数据库的外键约束什么的.当时还不以为然.没

C#获取Access数据库中的所有表名和列名

//C#获取Access数据库中的所有表名和列名    string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=E:\report20100819\report20100819.mdb";    OleDbConnection Conn = new OleDbConnection(ConnectionString);    Conn.Open(); DataTable

C#中获取Excel文件的第一个表名

//    2.以数据库方式打开并输入数据//      此方式将xls文件所在目录看作数据库,其中的xls文件看作数据库表,表名即文件名(不加扩展名).//      函数importExcelToDataSet(string FilePath,string sheet)功能:从xls中读出数据到DataSet中,并返回DataSet对象. private DataSet importExcelToDataSet(string FilePath/*即文件目录的路径*/, string shee

关于MYSQL:外键删除后,查询表发现外键依旧存在,再删一次会报错:原因及相关解决办法

1.创建表test6:外键名为test3_fk mysql> create table test6( -> id int, -> test_name varchar(32), -> constraint test3_fk foreign key(test_name) references student(name) -> ); Query OK, 0 rows affected (0.40 sec) mysql> desc test6; +-----------+---

获取引用某个主键的所有外键的表

在数据库中, 碰到删除一张表的时候,有时候会提示主键已经被其他表外键引用.不能删除.如果某个主键被引用的次数多了, 删除起来一个一个找的话,还是浪费时间的. 如果使用的是Oracle的数据库, 可以查询Oracle中的 系统表 USER_CONSTRAINTS SELECT * FROM R_CONSTRAINT_NAME WHERE R_CONSTRAINT_NAME = '被引用的主键约束' 扩展一下, 如果还想知道 具体引用表的哪个字段引用了这个主键. SELECT B.TABLE_NAM

批量删除MSSQL 中主外键约束

转自: http://www.maomao365.com/?p=813 在制作 MSSQL同步工具的时候,发现由于主外键的约束,导致数据同步异常,所有我们需要把 读数据库里面的主外键约束,进行批量删除操作. 1 如何批量查询数据库的主外键? 在MSSQL2005以上版本中,系统提供一个系统视图 sys.foreign_keys 可以查询出系统所有的外键约束2 如何批量删除数据库的主外间键? -----------------------------------------------------

【Oracle】【18】获取数据库当前用户下所有表名和表名的注释

SELECT A.TABLE_NAME, B.COMMENTS FROM USER_TABLES A, USER_TAB_COMMENTS B WHERE A.TABLE_NAME = B.TABLE_NAME ORDER BY TABLE_NAME 参考博客: 获取oracle数据库当前用户下所有表名和表名的注释 - 尹飞飞 - ITeye博客https://yinfeifei.iteye.com/blog/751858 原文地址:https://www.cnblogs.com/huashen

cookie、session的认识(仅作记录)

一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于在服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择.二.会话cookie和持久cookie的区别 如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了.这种生命期为浏览

十进制、十六进制、二进制之间的转换(仅作记录)

二进制和十六进制的互相转换比较重要.不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然. 我们也一样,只要学完这一小节,就能做到. 首先我们来看一个二进制数:1111,它是多少呢? 你可能还要这样计算:1 * 2^0 + 1 * 2^1 + 1 * 2^2 + 1 * 2^3 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15. 然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8.4