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
原文地址:https://www.cnblogs.com/ChengWenHao/p/sqlSeverPart5.html