zoukankan      html  css  js  c++  java
  • 2017-3-16 Tsql基础编程 存储过程 触发器 级联删除

    1.定义变量:

      declare @变量名 数据类型

     变量赋值:

      set @变量名 = 值; select @变量名 = 值;(常用) 

     取值打印:

      select @变量名        print @变量名

    要执行变量赋值取值的时候代码要一起执行,不能分句执行:

    declare @aa int ;
    select @aa = 11;
    select @aa;

    打印结果:

    2.分支语句:

      if @a>@b

      begin

           语句

      end

      else

      begin

        语句

      end

      declare @a int;
      declare @b int;
      select @a=1;
      select @b=2;
      if @a>@b
      begin
        select 'a比b大';
      end
      else
      begin
        select 'b比a大';
      end

    输出结果:b比a大

    3.循环语句:

      declare @a int ;

      select @a=1;

      while(@a<10)
      begin

       select @a

      end  

    declare @aa int;--定义变量
    select @aa=1;--赋值
    while @aa<10
    begin
    select @aa;--打印
    select @aa=@aa+1;--给变量重新赋值
    end

     4.存储过程:

    相当于函数,四要素,输入,输出,函数体,函数名

    create proc jiafa --无返回值
    @bb int, --第一个参数
    @cc int --第二个参数
    as
    return @bb+@cc;

    declare @bbb int; --定义一个变量接受和
    exec @bbb = jiafa 10,20; --2个数相加
    select @bbb; --打印结果

     

    5.触发器

      一个特殊的存储过程,没办法调用它,而是通过增删改的动作来实现

      一个表的一个动作只能有一个触发器

    格式:

      create trigger  哪个表的那个动作

      on 表名     ---- 针对于哪一个表写的触发器

      for 动作   ---- 针对于哪一个动作触发之后的触发器

    或者  instead of  ---- 针对于哪一个动作执行替换

      as

        触发器内容 

      例子:

    --1.  给score表创建触发器,删除内容之后自动查询表中剩余的内容

    create trigger Score_delete
    on score
    for delete
    as
    select * from score

    delete from score where sno='103'

    --2 给score表创建触发器,将要删除的内容替换成查询

    create trigger score_delete
    on score
    instead of delete    ----instead of 将要删除的内容替换成as后面的语句
    as
    select * from score

    delete from score where sno='105'

    --3 给score表建立触发器,将要删除的内容拦截,并将删除的内容展示出来

    create trigger score_delete
    on score
    instead of delete
    as
    select * from deleted ---deleted拦截触发器的内容,将要删除课程号为105的内容给展示出来

    delete from score where sno='105'

    --4 拦截删除的数据,并且进行提醒,不能删除

    create trigger score_delete
    on score
    instead of delete
    as
    declare @aa nvarchar(50); --声明变量
    select @aa = sno from deleted; --给变量赋值,将删除的sno赋值给变量
    if @aa='105'
    begin
    select '不能删除此数据' --如果是105提示此数据不能删除
    end
    else
    begin
    delete from score where sno=@aa; --如果不是限制数据可以删除
    end

    delete from score where sno='105'

    6.级联删除

    //创建2个表 用户表 班级表
    create table Users
    (
    ids nvarchar(50) primary key,
    Name nvarchar(50) ,
    Class nvarchar(50)
    )
    create table Class
    (
    ClassCode nvarchar(50) primary key,
    ClassName nvarchar(50)

    )
    insert into Class values('c001','一班')
    insert into Class values('c002','二班')
    insert into Class values('c003','三班')
    insert into Class values('c004','四班')
    insert into Users values('1','键盘','c001')
    insert into Users values('2','鼠标','c002')
    insert into Users values('3','李三','c003')
    insert into Users values('4','赵四','c004')

    //创建触发器---级联删除
    create trigger Class_delete
    on class
    instead of delete
    as
    declare @aa nvarchar(50);
    select @aa = classcode from class;
    delete from users where class=@aa;
    delete from class where classcode=@aa;
    //这样用触发器就可以删除班级表中classcode中的004
    delete from Class where ClassCode='c004'
    select * from Class

  • 相关阅读:
    第二期网络内生安全试验场,等你来挑战!
    「渗透测试练习」一次上传漏洞的绕过分析
    Javascript日期与C# DateTime 转换
    转帖:网站服务架构
    JQuery ajax url传值与data传值的区别
    ajaxFileUpload上传文件后提示下载的问题
    JS结构
    转载:APP的上线和推广——线上推广渠道
    AppServ与IIS快速共存搭建PHP环境
    android笔记之在WebView中显示ProgressBar的两种方法
  • 原文地址:https://www.cnblogs.com/changxiaosen/p/6957767.html
Copyright © 2011-2022 走看看