Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >递归存储过程中使用cursor

递归存储过程中使用cursor

作者头像
jack.yang
发布于 2025-04-05 03:31:20
发布于 2025-04-05 03:31:20
520
举报

注意定义成local类型的cursor !

PROCEDURE sp_get_all_lineal_parent @node_id int, @lineal_path varchar(200) output with encryption AS

SET NOCOUNT ON BEGIN IF ISNULL(@lineal_path, 'NULL') = 'NULL' SET @lineal_path = '' IF EXISTS( select DependentProductID from Dependence_TB where ProductID = @node_id ) BEGIN DECLARE cur_parent_node CURSOR FAST_FORWARD local FOR SELECT DependentProductID FROM Dependence_TB WHERE ProductID = @node_id

DECLARE @parent_node_id int

OPEN cur_parent_node FETCH NEXT FROM cur_parent_node INTO @parent_node_id WHILE @@FETCH_STATUS = 0 BEGIN set @lineal_path = @lineal_path + ',' + cast(@parent_node_id as varchar) exec sp_get_all_lineal_parent @parent_node_id, @lineal_path output

FETCH NEXT FROM cur_parent_node INTO @parent_node_id END CLOSE cur_parent_node DEALLOCATE cur_parent_node END insert into ##temp_a(a) select 100 select * from ##temp_a END

--调用示例begin declare @path varchar(200) create table ##temp_a(a int) EXEC sp_get_all_lineal_parent 12, @path output drop table ##temp_a select @path end

kitesky

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2008-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
解密encrypt的存储过程
--破解函数,过程,触发器,视图.仅限于SQLSERVER2000 IF EXISTS (select 1 from dbo.sysobjects where id = object_id(N'[dbo].[SP_DECRYPT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[SP_DECRYPT] GO CREATE PROCEDURE sp_decrypt(@objectname varchar(50)) AS begin set nocount on --破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器 --修正上一版视图触发器不能正确解密错误 begin tran declare @objectname1 varchar(100),@orgvarbin varbinary(8000) declare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 nvarchar(4000) DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000) declare @i int,@status int,@type varchar(10),@parentid int declare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int select @type=xtype,@parentid=parent_obj from sysobjects where id=object_id(@objectname) create table #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int) insert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments WHERE id = object_id(@objectname) select @number=max(number) from #temp set @k=0 while @k<=@number begin if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k) begin if @type='P' set @sql1=(case when @number>1 then 'ALTER PROCEDURE '+ @objectname +';'+rtrim(@k)+' WITH ENCRYPTION AS ' else 'ALTER PROCEDURE '+ @objectname+' WITH ENCRYPTION AS ' end) if @type='TR' begin declare @parent_obj varchar(255),@tr_parent_xtype varchar(10) select @parent_obj=parent_obj from sysobjects where id=object_id(@objectname) select @tr_parent_xtype=xtype from sysobjects where id=@parent_obj if @tr_parent_xtype='V' begin set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTERD OF INSERT AS PRINT 1 ' end else begin set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 ' end end if @type='FN' or @type='TF' or @type='IF' set @sql1=(case
jack.yang
2025/04/05
290
MS SQL 的存储过程练习
/*带参存储过程 if(OBJECT_ID('proc_find_stu', 'p') is not null)    drop proc proc_find_stu go create proc proc_find_stu(@startId int, @endId int) as    select * from student where stu_id between @startId and @endId go*/ /*调用存储过程 exec proc_find_stu 7, 9*/ --带通配符参数存储过程 /*if(OBJECT_ID('proc_findStudentByName','P') is not null)    drop proc proc_findStudentByName go create proc proc_findStudentByName(@name varchar(20) = '%j%', @nextName varchar(20) = '%') as    select * from student where stu_name like @name and stu_name like @nextName; go*/ --执行存储过程 /*exec proc_findStudentByName; exec proc_findStudentByName '%o%','t%';*/ --带输出参数存储过程 /*if(OBJECT_ID('proc_getStudentRecord','P') is not null)    drop proc proc_getStudentRecord go create proc proc_getStudentRecord(    @id int,--默认输入参数    @name varchar(20) out, -- 输出参数    @age varchar(20) output -- 输入输出参数 ) as    select @name = stu_name, @age = stu_age from student where stu_id = @id and stu_age = @age; go*/ -- /*declare @id int,         @name varchar(20), @temp varchar(20); set @id = 9; set @temp = 40; exec proc_getStudentRecord @id,@name out,@temp output; select @name, @temp print @name + '#' + @temp;*/ --不缓存存储过程 --WITH RECOMPILE 不缓存 /*if (OBJECT_ID('proc_temp','P') is not null)    drop proc proc_temp go create proc proc_temp with recompile as     select * from student; go*/ --exec proc_temp; --加密WITH ENCRYPTION /*if (OBJECT_ID('proc_temp_encryption','P')is not null)    drop proc proc_temp_ecryption go create proc proc_temp_encryption with encryption as    select * from student; go*/ /*exec proc_temp_encryption; exec sp_helptext 'proc_temp'; exec sp_helptext 'proc_temp_encryption';*/ --带游标参数存储过程 /*if(OBJECT_ID('proc_cursor','P') is not null)    drop proc proc_cursor go create proc proc_cursor    @cur cursor varying output as    set @cur = cursor forward_only static for    select stu_id, stu_name, stu_age from student;    open @cur; go*/ --调用 /*declare @exec_cur cursor; declare @id int,         @name varchar(20), @age int; exec proc_curs
静谧的小码农
2019/01/11
9820
oracle存储过程递归调用_函数的间接递归调用
注意:递归存储过程一般会用到 output 或 return,两者返回值类型上有一定的区别,output 基本上没有限制,但 return 返回的一般是 int 类型。
全栈程序员站长
2022/11/09
1.4K0
oracle存储过程递归调用_函数的间接递归调用
SQLSERVER存储过程语法详解
@parameter 过程中的参数。在 Create PROCEDURE 语句中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。
全栈程序员站长
2022/09/13
1.7K0
SQL Server 存储过程
Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。 Ø 存储过程的概念     存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。     存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。     由于存储过程在创建时即在数据
hbbliyong
2018/03/05
1.8K0
SQL基础用法(实例二)
1 /* 2 3 4 2006年10月01日 5 6 SQL Server 数据库的高级操作 7 (1) 批处理 8 (2) 变量 9 (3) 逻辑控制 10 (4) 视图 11 (5) 函数 12 (6) 高级查询 13 14 */ 15 16 (1)批处理 17 将多条SQL语句作为一个整体去编译,生成一个执行计划,然后,执行! 18 理解批处理的关键在于"编译",对于由多条语句组成的一个批处理, 1
用户1112962
2018/07/04
8040
SQLSERVER 存储过程 语法
*****************************************************
全栈程序员站长
2022/09/13
2.7K0
常用存储过程语法
现在学一下常用的存储过程的语法,只要花一点点时间学习下,就能用存储过程实现很复杂的功能,可以少写很多代码。
全栈程序员站长
2022/09/13
6740
StoredProcedure — 存储过程
DECLARE @F001 SMALLINT ,           @F002 INTEGER ,           @F003 VARCHAR ( 20 ), @F004 CHAR ( 20 ),           @F002 MONEY 2.赋值语句
全栈程序员站长
2022/09/18
3780
SQL语句大全(3)
错误!未找到目录项。 set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere 2、收缩数据库 --重建索引 DBCC REINDEX DBCC INDEXDEFRAG --收缩数据和日志 DBCC SHRINKDB DBCC SHRINKFILE
py3study
2020/01/14
7960
SQL SERVER 的压缩功能
  压缩分为行(ROW)压缩和页(PAGE)压缩,页压缩的压缩比率更高一些,正常来说一般数据库可以实现50%以上的压缩比率。
全栈程序员站长
2022/09/19
6110
【SQL】统计所有表的行数
原理:遍历所有用户表,用sp_spaceused过程分别获取每张表的行数并写入临时表,最后返回临时表
AhDung
2018/09/13
1.9K0
存储过程中指定参数
一个过程最多可以有 2100 个参数,每个参数都有名称、数据类型和方向。 还可以为参数指定默认值(可选)。
Vincent-yuan
2020/04/09
1.2K0
SQL Server for循环用法
最近需要修改一个项目,涉及到SqlServer数据库知识,整理出来和大家分享一下,老规矩,先贴示例,最后是语法:
浩Coding
2019/07/03
16.9K0
游标
执行结果 1         2       测试看看      xland 2         4       asdfasdf      xland 3         5       asdfasdf      xland 4         6       全文索引全文索引全文索引xland的全文索引      xland 再看一种执行方式
liulun
2022/05/08
5240
用Sql生成数据插入Sql脚本
CREATE PROCEDURE dbo.UspOutputData @tablename sysname AS declare @column varchar(1000) declare @columndata varchar(1000) declare @sql varchar(4000) declare @xtype tinyint declare @name sysname declare @objectId int declare @objectname sysname decl
脑洞的蜂蜜
2018/02/01
1.3K0
【SQL】找出行数与自增标识值不相等的表(即有缺行)
原理:遍历所有含自增列的用户表,用sp_spaceused过程分别获取每张表的行数并写入临时表,然后使用IDENT_CURRENT函数获取表的最大标识值,比较二者并返回结果
AhDung
2018/09/13
8300
关于SQL Server 镜像数据库快照的创建及使用
从SQL Server 2005 SP1 起,SQL 开始支持数据库镜像。它的设计目的是试图为SQL Server 提供一个具有实时性数据同步的灾难恢复技术,即能够提供数据冗余备份,切换起来比较方便。每个主体数据库只能有一个镜像数据库。镜像数据库作为主体数据库的一个副本,在主体数据库发生故障、不可访问时能够迅速恢复数据库访问,提供故障恢复功能。镜像数据库一直处于“恢复”状态,因此不能被直接访问。
东山絮柳仔
2021/03/20
2.3K0
经典SQL语句大全
A:UNION 运算符 UNION 运算符通过组合其他两个结果表,并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
SQL数据库开发
2024/04/24
1270
经典SQL语句大全
mssql全库查找且替换字段
两个业务实体合并。假设业务实体为人员A和人员B,需要将两个人员的相关数据合并,且保留人员B,删掉人员A。
cultureSun
2023/11/24
2070
相关推荐
解密encrypt的存储过程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档