SQL 存储过程 知识

sql 里如果想循环数据,可以使用游标,但是效率比较慢,相当于每次循环都要查询一次,适用于处理少量的DateFix

例子如下

begin

declare @id varchar(5);--先是声明变量
declare @name varchar(max);
declare @FullName varchar(5);
DECLARE test CURSOR FOR --创建游标test,stock 某表
select  s.TypeID,s.Name,s.FullName from BrandType_Test s --这里是需要操作的数据
--打开游标
OPEN test
FETCH NEXT FROM test INTO @id,@name,@FullName --这里和for 循环的初始化类似->i=0  注意into 后面跟的变量  要和取得的列的数目对应
while @@FETCH_STATUS =0  --提取数据的状态,游标读取下一条数据是否成功
begin
    print @id
    print @name
    FETCH NEXT FROM test INTO @id,@name,@FullName-- 类似->i++
end
--关闭游标
CLOSE test
--释放资源
DEALLOCATE test

end

(*注意: @@FETCH_STATUS

0 FETCH 语句成功   
-1 FETCH 语句失败或此行不在结果集中   
-2 被提取的行不存在  )

如果是相对数据量比较大,可以使用with as 子查询 和 join 的巧用,把子查询作为每次循环的条件。

with A as (select * from class)

也就是将重复用到的大批量 的SQL语句,放到with as 中,加一个别名,在后面用到的时候就可以直接用。对于大批量的SQL数据,起到优化的作用。

数据库分页

可以用析函数row_number() 给每一条数据一个编号

然后根据每一个页面取多少数据进行输出。

数据分组处理

row_number() 和 partiion by  连用是通过row_number()对分组后的数据进行编号,这样的话属于同一组的数据就有相同的编号,然后可以对不同编号的数据组进行处理。

partiion by其实就是group by但用法不一样。

常用的数据库的三元运算符,Case  When 需要判断的数据 Then 这个条件下的结果 End 

select @@rowcount

获取最近一次数据库操作影响的行数,可以通过这个来判断sql是否有限执行成功,用于自定义error

with(RowLock,UpdLock) 

行级锁和更新锁,比如查询时有更新,可以通过这个锁定数据,只有查询完成后才可以更新数据。

rank()

RANK()

在计算排序时,若存在相同位次,会跳过之后的位次。

例如,有3条排在第1位时,排序为:1,1,1,4······

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值