1. 游标
用途: 在数据很多的时候, 如果在 java 代码中进行循环之后再进行更新数据, 会造成频繁的连接数据库, 耗费性能, 所以就可以使用到游标
作用: 查询出来的集合直接在 SQL 中进行遍历在进行更新
- DECLARE allUnits CURSOR // 定义游标, For 后面是集合, 你为那个集合定义的游标.
- FOR (SELECT ID,CODE FROM tbl_unit where tbl_unit.PARENT_UNIT_CODE is null)
- OPEN allUnits // 开启游标
- declare @ID int,@CODE nvarchar(50) // 定义游标中你要使用到的变量, 需要注意的是: 这里的变量个数必须和你上面集合中查询出来的个数一致
- FETCH NEXT FROM allUnits INTO @ID,@CODE // 开启第一行数据, 导入参数
- WHILE @@FETCH_STATUS = 0 // 判断游标的下一条数据是否存在: =0 表示成功,= -1 表示失败或不在结果集中,= -2 表示提取的行不存在.
- BEGIN // 开始业务逻辑
- PRINT @CODE
- PRINT @ID
- UPDATE tbl_unit SET tbl_unit.parent_unit_code = (
- ISNULL(
- (SELECT CODE from tbl_unit WHERE tbl_unit.CODE = left(@CODE,6)+'000' AND ID != @ID),
- (SELECT CODE from tbl_unit WHERE tbl_unit.CODE = left(@CODE,3)+'000000' AND ID != @ID)
- )
- ) WHERE tbl_unit.ID = @ID
- FETCH NEXT FROM allUnits INTO @ID,@CODE // 导入下一行数据
- END // 游标结束
- CLOSE allUnits // 关闭游标
- DEALLOCATE allUnits // 释放游标
来源: http://www.bubuko.com/infodetail-2706479.html