--局部临时表:
    
    --临时表的表名有一个前缀#
    
    --临时表只对当前会话有效,只要将连接断开,再次打开则临时表就没有了。
  
    --如果临时表是在存储过程中创建的,则当存储过程执行完毕,则自动销毁。类似于c#变量的作用域范围。
    
    --
  
    --全局临时表:
    
    --前缀##
    
    --多个会话中可以共享全局临时表
    
    --只有创建该表的会话断开时才会删除全局临时表,如果这时,正有其他会话在访问该临时表,则会等待该会话结束后删除临时表。
  
    create table #student
    
    (
    
     username nvarchar(10),
    
     age int
    
    )
    
    create table ##quanjustudent
    
    (
    
      username nvarchar(10),
    
      age int
    
    )
    
    --表变量
    
    declare @T1 table(c1 int,c2 int);
    
    insert into @t1 values(1,2)
    
    select * from @t1
  
    --在视图中的查询语句,必须为每一列建一个列名
    
    create view vw1
    
    as
    
    select 
    
    tsname,
    
    case
    
      when tsage>50 then '豆蔻年华'
    
     else '青壮年'
    
    end as '外号'
    
    from tblstudent
    
    select * from vw1
  
    --在视图中不能使用order by语句。除非:除非另外还指定了 TOP 或 FOR XML
    
    --错误的写法
    
    create view vw2
    
    as
    
    select * from tblstudent order by tsid desc
    
    --正确的写法
    
    create view vw2
    
    as
    
    select top 10 * from tblstudent order by tsid desc
  
    --=======声明变量----
    
    declare @name varchar(10)
    
    declare @age int
    
    set @name='abc'
    
    set @age=1
    
    print @name
    
    print @age
  
    declare @userAge int
    
    -------------=使用set与select为变量赋值的区别============
    
    --当使用set为变量赋值时,如果右边返回多个值,则“报错”。
    
     set @userAge=(select tsage from TblStudent)
    
     print @userAge
  
    declare @userAge int
    
     --当使用select为变量赋值时,如果右边返回多个值,则始终以最后一个为准
    
     select top 5  @userAge=tsage from TblStudent
    
     print @userAge
  
    
    declare @age int
    
     --一开始变量没有赋值的时候为null,null与任何类型计算得到的结果还是null
    
     --所以和建议声明变量的时候一定要赋初值。
    
     set @age=@age+1
    
     select @age --所以这里输出还是null
  
    
    ----------事务--
    
    begin tran
    
    declare @sum int
    
    update bank set salary=salary+1000 where id=1
    
    set @sum+=@@error
    
    update bank set salary=salary-1000 where id=2
    
    set @sum+=@@error
    
    if @sum<>0
    
    begin
    
    -- 回滚
    
      rollback
    
    end
    
    else
    
    begin
    
    --提交
    
      commit tran
    
    end
  
    --隐式事务
    
    SET IMPLICIT_TRANSACTIONS  ON 
    
    --关闭数据库的隐式提交
    
    SET IMPLICIT_TRANSACTIONS  OFF 
  
    
    ------------存储过程-----------
    
    ---分页存储过程
    
    create proc fenye
    
    @size int,
    
    @index int,
    
    @total int output
    
    as
  
      select * from  
    
    (
    
      select *, row_number() over(order by tsid) as number from tblstudent
    
    )as T
    
    where T.tsid between (@index-1)*@size+1 and @index*@size
  
select @total=count(1) from tblstudent
    declare @cont int
    
    exec fenye 2,2,@cont output
    
    print @cont
  
    --sql server中的触发器是表级触发器,无论删除多少行或者插入多少行,只触发一次。
    
    --是按语句来触发的,每次执行一次语句,触发一次触发器。
    
    --不会每一条语句都触发
    
    create trigger tri_tblclass_insert_after
    
    on tblclass after insert
    
    as
    
    declare @classid int
    
    declare @classname varchar(20)
    
    select @classid=tclassid,@classname=tclassname from tblclass
    
    print @classid
    
    print @classname
  
insert into tblclass values('你懂的','还能有啥哇')
    
    --当使用instead of 触发器以后,原来的删除操作被替换成了:
    
    --insert into TblClassBak select * from deleted
    
    create trigger tri_TblClass_delete_instead_of
    
    on TblClass instead of delete
    
    as
    
    begin
    
     
    
     insert into TblClassBak
    
     select * from deleted
    
    end
  


 
					 
					