SQL SERVER-笔记6

--01:sql:游标。
--创建一个游标,然后遍历UserInfo表中的所有数据,打印 用户id和用户名。
--select  * from UserInfo

----定义游标,让游标指向sql查询的结果。
--declare demoCursor Cursor for
--    select UserName,UserId,UserAge from UserInfo
----打开游标。
--open demoCursor

--    declare @UserName nvarchar(32)
--    declare @UserAge int
--    declare @UserId int
--    --把游标指向的数据取出来, 把数据放到 后面的三个变量中。
--    fetch next from demoCursor into @UserName,@UserId,@UserAge

--    while(@@FETCH_STATUS= 0)--@@FETCH_STATUS=0的时候表示,取数据成功。
--    begin
--        print @UserName
--        print @UserAge
--        print @UserId
--        update UserInfo set UserName=@UserName+'kk' where UserId=@UserId--给当前行的Name列加了后缀。
--        print '------------'    
--        fetch next from demoCursor into @UserName,@UserId,@UserAge
--    end
    
--close demoCursor --关闭游标
--deallocate demoCursor--释放游标,释放后就不能再open

--02:视图
--创建视图:视图中就是放 年龄大于40的用户信息
--create View VW_UserInfo as
--     select * from UserInfo where UserAge>40
--视图的使用
--select * from VW_UserInfo  --视图就可以直接用于select 查询,当做一张表来用。

--03:临时表
--临时表  在表名前面 加了  #,临时表  和普通的表:
----会话结束的时候,那么临时表就结束了。
--create table #TestTb
--(
--    Id  int identity(1,1) primary key not null,
--    Name nvarchar(32) null
--)
----临时表的使用跟普通的表一样。
--select * from #TestTb

----临时表用完之后一定要: 释放掉临时表
--drop table #TestTb

--常用的临时表的用法
--select * into #Tb from  Userinfo
--select * from #Tb
--drop table #Tb

--临时表可以用于 高并发的情况的优化
--join 

--只要做表的连接;那么肯定就会  做两个表的笛卡尔积。
--一个查询中关联了7-8张表。
--表的数据非常多,另外表数据crud操作又非常频繁。

--数据库:锁概念。
--  锁的级别在表级别。


--  X:排它锁    S:共享锁

--  insert、update、delete 会在表上加   X

--  select   在表上添加  S锁。  

--多表连接
--假设:员工表:10000000000000   部门:10亿条
--使用临时表。

--select *  from Employee as E
--left join Position as P on E.PositionId = p.PositionId

----优化的原则:就是尽早的释放锁。
--select * into #Emp  from Employee 
--select * into #Pos from Position
----
--select * from #Emp as E
--left join #Pos as P on P.PositionId=E.PositionId

--drop table #Emp
--drop table #Pos

--全局的临时表:所有的用户的会话都可以访问到。
--全局临时表会在所有用户都断开会话后,会自动释放。
--select * into ##Pos from Position--尽量不要全局的。
--drop table  ##Pos


--04: try catch:sql的异常处理
--begin try
--    sql...
--end try
--begin catch
--    ...
--end catch

--05: 事务。Sql使用事务
--select * from UserInfo

--begin try
--    begin transaction--开启事务
--        update UserInfo set UserName=N'你好' where UserId=2
--        update UserInfo set UserAge=N'数量的解放路' where UserId=3
--    commit transaction--提交事务:上面执行结果执行到数据库里面去。
--end try
--begin catch
--    rollback transaction--回滚事务
--end catch


-- update UserInfo set UserName=N'sssss' where UserId=2


--06: 存储过程
--存储过程其实就是没有返回值的 一段sql代码。
if(exists(select * from sys.all_objects where name='Pro_UserInfo_GetUserInfo'))
    drop proc Pro_UserInfo_GetUserInfo
go
--定义存储过程
--create proc Pro_UserInfo_GetUserInfo 
--@UserAge int,   --输入参数
--@Num int output--输出参数
--as
--    select * from UserInfo  where UserAge>@UserAge
--    --在存储过程执行结束前必须给输出参数赋值。
--    select @Num=Count(*) from UserInfo--
--    print @Num
--go


----调用存储过程
--declare @Num int
--exec Pro_UserInfo_GetUserInfo 100,@Num out
--print @Num--执行完存储过程打印


--分页存储过程
--一页有两条, 

--if(exists(select * from sys.all_objects where name='Pro_UserInfo_GetPageUserInfos'))
--    drop proc Pro_UserInfo_GetPageUserInfos
--go

--create proc Pro_UserInfo_GetPageUserInfos
--@PageSize int,
--@pageIndex int,
--@TotalCount int  output
--as
--select * from (
--    select *,ROW_NUMBER() over(Order by UserId asc) as RowNum from UserInfo
--) as T
--where T.RowNum between ((@PageIndex-1)*@PageSize+1)  and (@PageSize*@PageIndex)
----
--select @TotalCount=count(1) from UserInfo


----调用分页存储过程
--declare @Total int
----select * from userInfo
--exec Pro_UserInfo_GetPageUserInfos 2,4,@Total out
--print @Total

--select * from UserInfo

--系统存储过程
--exec sp_databases
--exec sp_tables
--exec sp_columns 'UserInfo'

--exec sp_databases
--select * from sys.all_objects 

--declare @strSql nvarchar(max)
--set @strSql='select * from userinfo'
--把字符串当成一个sql脚本执行
--exec (@strSql)

--exec ('select * from UserInfo')

--exec sp_executesql @strSql  --兼容性更强


--select getdate()
--select avg()
---自定义函数

--:把年龄大于传过来的参数的 数据的条数返回。
--create function FUN_GetUser(@UserAge int)
--returns int
--as
--begin
--    declare @result int
--    set @result=(select count(1) from UserInfo where UserAge>@UserAge)
--    return @result
--end

--select count(1) from UserInfo where UserAge>40
--select dbo.FUN_GetUser(40)

--表 值函数。
--create function FUN_UserInfo_GetUserInfo2(@UserAge int)
--returns table
--as
--        return ( select * from UserInfo where UserAge>@UserAge)

--select * from FUN_UserInfo_GetUserInfo(40)

--select * from Pro_UserInfo_GetUserInfo

--create table DemoLastDAy
--(
--    Id int identity(1,1) primary key not null,
--    Name nvarchar(32) null
--)

select * from DemoLastDAy

--insert into DemoLastDAy(Name) output inserted.Id values('sss222')

--cmd.ExucuteNonquery()
--cmd.ExucuteScalar();
insert into DemoLastDAy(Name) values('sfdsfdsljlsj')

//当DemoLastDAy发生了插入操作后,会触发下面这个触发器的执行。
create trigger TR_DemoLastDAy_Insert on  DemoLastDAy
for insert
as
begin
    declare @Id int
    select @Id=Id from inserted-- 它是一张表。
    update DemoLastDAy set Name=Name+cast(getdate() as nvarchar(32)) where Id=@Id
end 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值