这么多年第一次自己去用游标和临时表

汗颜,做了这么多年开发自己第一次用游标和临时表

还是借助度娘才写出来的,请大家给指点下。。。

 1 CREATE PROCEDURE [dbo].[sp_LaodDefaultFM]
 2 (
 3  @ExhID int ,
 4  @DefaultExhID INT,
 5 @Result INT
 6  )
 7 AS
 8 BEGIN
 9 --判断当前会话中临时表是否存在
10 if exists(select * from dbo.sysobjects where object_id(‘tempdb.dbo.#temp‘) is not null)
11  DROP TABLE #temp
12  ELSE
13  CREATE     TABLE #temp(FsvID INT,      FskID INT, FsvValue NVARCHAR(500)    )
14   if exists(select * from dbo.sysobjects where object_id(‘tempdb.dbo.#temp2‘) is not null)
15  delete from #temp2
16 declare @defaultfsv int
17 INSERT  INTO #temp SELECT FsvID,FskID,FsvValue FROM dbo.FuncSetValue    WHERE ExhID=@DefaultExhID
18
19 --开始事务
20 BEGIN TRAN
21 DECLARE @error INT
22 declare @suberror INT
23 SET @error=0      SET @suberror=0
24 --声明游标
25 DECLARE fsvindex CURSOR FOR SELECT fsvid FROM #temp
26 --打开游标
27 OPEN fsvindex
28  WHILE @@FETCH_STATUS=0
29
30 BEGIN
31 --开始循环游标变量
32 FETCH NEXT FROM fsvindex INTO @defaultfsv
33 --执行操作
34 DECLARE @curfsvid INT
35 INSERT dbo.FuncSetValue( FskID ,FsvValue ,FsvCreatetime ,ExhID )( SELECT FskID,FsvValue,GETDATE(),@ExhID FROM dbo.FuncSetValue WHERE FsvID=@defaultfsv)
36 SET @curfsvid=(SELECT @@IDENTITY)
37 IF @curfsvid>0
38 BEGIN
39 INSERT dbo.FuncSetSubValue( FssID ,FsvID ,FbvKey ,FbvValue ,FbvCreatime ,FbvOrderStr)( SELECT FssID,@curfsvid,FbvKey,FbvValue,GETDATE(),0 FROM dbo.FuncSetSubValue WHERE FsvID=@defaultfsv)SET @suberror=@suberror+@@ERROR
40 END
41 ELSE
42 BEGIN
43 SET @error=@error+1
44 END
45 END
46
47
48 IF @error=0 AND @suberror=0
49 BEGIN
50 SET @Result=1
51 COMMIT TRAN
52 END
53 ELSE
54 BEGIN
55 SET @Result=0
56 ROLLBACK TRAN
57 END
58 --关闭游标
59 CLOSE fsvindex
60 --释放游标
61 DEALLOCATE fsvindex
62 SELECT @Result
63
64
65 END
66
67
68
69
70
71 GO

Code

原文地址:https://www.cnblogs.com/qzzy/p/8168658.html

时间: 2024-10-17 08:38:52

这么多年第一次自己去用游标和临时表的相关文章

T-SQL应用,视图、存储过程、触发器、游标、临时表等

sqlserver常用操作: 视图.存储过程.触发器.函数 --*********************批处理********************* --[在一个批处理中存有一个语法错误,则所有的语句都无法通过编译] USE flowershopdb SELECT * FROM tb_category SELECT * FROM tb_detailed SELECT * FROM tb_product SELECT * FROM tb_shopping SELECT * FROM tb_u

oracle游标、临时表使用练习

1.创建一张会话级的临时表: <span style="font-size:14px;">create global temporary table pact_test ( pact_id varchar2(100), pact_code varchar2(100), pact_name varchar2(800) ) on commit preserve rows;</span> 2.创建一张主表,并插入数据: <span style="fon

存储过程中游标和临时表的使用

游标: 游标一般用于把通过脚本得到的结果集的内容在用于其它的SQL语句中.但是游标执行会影响脚本执行速度,所以使用时请慎重. 在存储过程或触发器中使用 SQL 游标的典型过程为: 声明SQL 变量包含游标返回的数据.为每个结果集列声明一个变量.声明足够大的变量来保存列返回的值,并声明变量的类型为可从列数据类型隐式转换得到的数据类型. 使用 DECLARE CURSOR 语句将 SQL 游标与 SELECT 语句相关联.另外,DECLARE CURSOR 语句还定义游标的特性,例如游标名称以及游标

mysql 存储过程中使用游标中使用临时表可以替代数组效果

mysql不支持数组.但有时候需要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算,mysql临时表可以解决这个问题.临时表:只有在当前连接情况下, TEMPORARY 表才是可见的.当连接关闭时, TEMPORARY 表被自动取消.必须拥有 create temporary table 权限,才能创建临时表.可以通过指定 engine = memory; 来指定创建内存临时表. 先建立要用的数据表及数据: drop table

mysql游标中使用临时表

有时候需我们要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算,mysql临时表可以解决这个问题. 所谓临时表:只有在当前连接情况下, TEMPORARY 表才是可见的.当连接关闭时, TEMPORARY 表被自动取消.必须拥有 create temporary table 权限,才能创建临时表.可以通过指定 engine = memory; 来指定创建内存临时表. drop table if exists pre_person

SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除(drop table #tableName)吗?

本文出处:http://www.cnblogs.com/wy123/p/6704619.html 问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表,有些人习惯在存储过程结束的时候一个一个显式地删除过程中定义的临时表(drop table #tName),有些人又没有这个习惯,对于不明真相的群众或者喜欢思考的人会问,存储过程中定义的临时表,最后要不要主动删除,为什么?或者说是不是存储过程结束的时候删除临时表更加规范?不止一个人问过这个问题了,说实在话,本人之前确实不清楚,只

SSIS: 一步步教你在SSIS 中使用临时表

需求: 存在 A 和 B 两个数据库,他们都存在 一个 T1 表,A 数据库的T1 表是源, B数据库的T1表是目的,我们要使 两个表保持同步,即:A.T1存在, B.T1 表不存在则插入. 解决方案: 1.在B 数据库中创建一个临时表 TestTmp,存储 A.T1 中的数据 2.比较 B.TestTmp和 B.T1的数据 如果一条记录在B.TestTmp存在,B.T1不存在,则将此记录插入到 B.T1表中. 声明: 用 SSIS2015数据库代替 A数据库. 用TSQL2012数据库可以代替

创建角色随机名字(mysql抽取随机记录)和mysql游标的使用

最近在开发中遇到了一些问题,在此记录一下解决的方法,已作备忘. 1.现在创建游戏角色的时候,基本上都是支持角色名字随机的,以前此功能在客户端用代码实现,然后向服务器请求并验证,后来发现有时候连续几次都失败,所以改成在服务器实现.实现方法主要考虑使用mysql随机查询记录,在网上查了很多方案,然后用在了我们游戏中. 实现方案是,将所有随机名字都插入到一张表中,然后从中随机取一条当前角色表中没有出现过的名字. BEGIN DECLARE randnum int DEFAULT 0; SELECT F

scrapy 爬去网页(1)

第一次爬去https://segmentfault.com/t/python?type=newest&page=1 首先定义爬去的字段: class CnblogsItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() title = scrapy.Field() link = scrapy.Field() desc = scrapy.Field() listUrl = scr