• SQL Server -- 回忆笔记(五):T-SQL编程,系统变量,事务,游标,触发器


    SQL Server -- 回忆笔记(五):T-SQL编程,系统变量,事务,游标,触发器

    1. T-SQL编程

      1)声明变量

      declare @age int

      (2)为变量赋值

      set @age=26

      (3)while循环

        declare @i int=1
        while @i<=100
            begin
                print @i
                @i=@i+1
            end

      (4)if  else

        if @i>10
            begin
                print '大于10'
            end
        else if @i>5
            begin
                print '大于5'
            end
        else
            begin
                print '小于等于5'
            end

      (5)系统变量

        @@version: 返回  SQL Server的当前安装的系统和生成信息。
        @@error: 上一条sql语句出错,会有错误号;上一条sql执行没出错,则为0。
        @@lanuage: 返回当前所用语言的名称。

        @@max_connections:  返回 SQL Server实例允许同时进行的最大用户连接数。(实际允许的用户连接数还依赖于所安装的  SQL Server的版本以及应用程序和硬件的限制)
        @@Rowcount: 上一条sql语句影响的行数。
        @@servername: 返回正在运行  SQL Server的本地服务器的名称。

        @@connections: 此函数返回  SQL Server自上次启动以来尝试的连接数,无论连接是成功还是失败。

      (6)事务

        一个事务中,不能一个sql语句执行成功,一个执行失败。只要有一个sql语句执行失败,就是失败。

        自动提高事务:当执行一条sql语句,数据库自动打开一个事务,执行成功->自动提交,执行失败->自动回滚。

        隐式事务:当执行一条sql语句,数据库自动打开一个事务,需要手动提交,手动回滚。(打开隐式事务:set implicit_Transactions ON)

        显式事务:需要手动打开事务,手动提交,手动回滚。

        打开一个事务:

        begin transaction
            declare @sum int=0
            update tableA set Name='大胡子' where id=2
            set @sum=@sum+@@error
            update tableB set Name='大胡子' where id=2
            set @sum=@sum+@@error
            if @sum<>0
                begin
                    rollback --回滚,也可写rollback transaction
                end
            else
                begin
                    commit  --提交,也可写commit transaction
                end

    2.  游标cursor (相当于C#中的For)

      定义游标:

        declare Mycursor cursor for
            select UserName,Age,Email from tbUsers

      使用游标:

        open Mycursor
            declare @uName varchar(50)
            declare @uAge int
            declare @uEmail varchar(50)
            fetch next from Mycursor into @uName,@uAge,@uEmail
            if (@@fetch_status=0)
            begin
                print @uName
                print @uAge
                print @uEmail
            end
        close Mycursor

    3. 触发器 trigger

      触发器是数据库服务器中发生事件时自动执行的一种特殊存储过程。

      DML触发器:如果用户要通过数据操作语言 (DML) 事件编辑数据,则执行 DML 触发器。

            表或视图的 insert, delete, update语句(不支持select)。

      DDL触发器:DDL 触发器用于响应各种数据定义语言 (DDL) 事件。

            这些事件主要对应于  Transact-SQL Create、Alter 和 Drop 语句,以及执行类似 DDL 操作的某些系统存储过程。

      登录触发器: 登录触发器在遇到 Login 事件时触发,该事件是在建立用户会话时引发的。

      创建触发器:

        create trigger trg_In ON tbUsers
        after delete
        as
            begin
                insert into tbUsers_backup(Name,Age,Email) select Name,Age,Email from deleted
            end
  • 相关阅读:
    lua时间戳和日期转换及踩坑【转】
    Js正则表达式验证输入是否有特殊字符【转】
    PHP数据类型转换【转】
    JavaScript indexOf() 方法
    CSS文本下划线 删除线 上划线【转】
    PHP中把stdClass Object转array的几个方法【转】
    2020软件工程作业02
    2020软件工程作业01
    2020 CCPC Wannafly Winter Camp Day1-F-乘法
    牛客-装货物
  • 原文地址:https://www.cnblogs.com/ChengWenHao/p/sqlSeverPart5.html
Copyright © 2020-2023  润新知