1. 存储过程返回游标
Sql代码
USE [TEST_DB] GO /****** [PRT].[Move_Data_Return_Cursor] Script Date: 03/08/2012 17:38:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /********************************************************************************* *把数据从表 DATA_SOURCE_TABLE 移动到表 TEST_TABLE . 返回游标供Move_Data_Handle_Cursor供Move_Data_Handle_Cursor存储过程使用. *DataServer: 110.110.110.110 *DataBase: TEST_DB *Name: [Move_Data_Return_Cursor] *Function: *Input: @overTimeHour INT *Output: @CURSOR_PriceChangeRecord CURSOR *Creator: GREATWQS 2012-02-23 *Updated: GREATWQS 2012-03-08 UPDATE NEW REQUIREMENT **********************************************************************************/ ALTER PROCEDURE [PRT].[Move_Data_Return_Cursor] -- Add the parameters for the stored procedure here @overTimeHour INT, @CURSOR_PriceChangeRecord CURSOR VARYING OUTPUT AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- print @overTimeHour; -- 1. 声明游标: DECLARE CURSOR_PriceChangeRecord SET @CURSOR_PriceChangeRecord = CURSOR FORWARD_ONLY STATIC FOR SELECT ItemNo, ItemName, ItemColor, ItemSize, ItemMadeIn, InDate FROM PRT.DATA_SOURCE_TABLE WITH(NOLOCK) WHERE InDate > dateadd(HOUR, -@overTimeHour, getdate()) -- 在这里进行时间的限定. -- 2. 打开游标 OPEN @CURSOR_PriceChangeRecord END
2. 存储过程处理返回游标
Sql代码
USE [TEST_DB] GO /****** [PRT].[Move_Data_RHandle_Cursor] Script Date: 03/08/2012 17:39:27 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /********************************************************************************* *把数据从表 DATA_SOURCE_TABLE 移动到表 TEST_TABLE *把游标中的数据,插入到表TEST_TABLE. *DataServer: 110.110.110.110 *DataBase: TEST_DB *Name: [Move_Data_Handle_Cursor] *Function: *Input: @overTimeHour INT *Output: *Creator: GREATWQS 2012-02-23 *Updated: GREATWQS 2012-03-08 UPDATE NEW REQUIREMENT **********************************************************************************/ ALTER PROCEDURE [PRT].[Move_Data_Handle_Cursor] -- 超时时间(小时) @overTimeHour INT AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE -- 需要插入表TEST_TABLE,数据来源声明 @ItemNumber_Insert CHAR(20), @ItemName_Insert CHAR(50), @ItemColor_Insert CHAR(10), @ItemSize_Insert CHAR(5), @ItemWhereMadeIn_Insert CHAR(20), @createTime_Insert DATETIME, @changeTime_Insert DATETIME, @lastChangeTime_Insert DATETIME, @priority_Insert INT, @itemType_Insert INT, @active_Insert INT, -- ItemNumber Record num in table @totalNum_SelectDB INT, @changeTime_SelectDB DATETIME -- Set Default Value SET @ItemWhereMadeIn_Insert = 0 SET @createTime_Insert = getdate() SET @lastChangeTime_Insert = null SET @priority_Insert = 0 SET @itemType_Insert = 0 SET @active_Insert = 1 -- 1. 声明游标: 在过程内部自己定义有游标时,调用游标前面不加@符号 DECLARE @CURSOR_Result CURSOR -- 2. 得到上个游标, 上个游标已经打开 EXEC Move_Data_Return_Cursor @overTimeHour, @CURSOR_PriceChangeRecord = @CURSOR_Result OUTPUT -- 3. 抓取游标中的数据: FETCH CURSOR_Result FETCH NEXT FROM @CURSOR_Result INTO @ItemNumber_Insert, @ItemName_Insert, @ItemColor_Insert, @ItemSize_Insert, @changeTime_Insert -- 4. 对游标中的每一个记录进行处理: 循环 WHILE (@@FETCH_STATUS = 0) BEGIN -- 查看此ItemNumber_Insert是否已经存在表中 SELECT TOP 1 @totalNum_SelectDB = COUNT(*) FROM PRT.TEST_TABLE WITH(NOLOCK) WHERE ItemNumber = @ItemNumber_Insert -- 如果表不存在此@ItemNumber_Insert, 则插入 IF @totalNum_SelectDB = 0 BEGIN INSERT INTO PRT.TEST_TABLE( [ItemNumber], [ItemName], [ItemColor], [ItemSize], [MadeIn], [createTime], [changeTime], [lastChangeTime], [priority], [itemType], [active]) VALUES ( @ItemNumber_Insert, @ItemName_Insert, @ItemColor_Insert, @ItemSize_Insert, @ItemWhereMadeIn_Insert, @createTime_Insert, @changeTime_Insert, @lastChangeTime_Insert, @priority_Insert, @itemType_Insert, @active_Insert ) END -- 如果此ItemNumber存在于表中 ELSE BEGIN -- 查看此ItemNumber_Insert的记录 SELECT TOP 1 @changeTime_SelectDB = changeTime FROM PRT.TEST_TABLE WITH(NOLOCK) WHERE ItemNumber = @ItemNumber_Insert -- If item has exists in table, and changeTime<=newItem.changeTime -- fresh the changeTime = newItem.changeTime, set active=1; IF @changeTime_SelectDB < @changeTime_Insert BEGIN UPDATE PRT.TEST_TABLE SET changeTime = @changeTime_Insert, active = 1 WHERE ItemNumber = @ItemNumber_Insert END END -- FETCH NEXT RECORD FROM @CURSOR_Result FETCH NEXT FROM @CURSOR_Result INTO @ItemNumber_Insert, @ItemName_Insert, @ItemColor_Insert, @ItemSize_Insert, @changeTime_Insert END -- 5. 关闭游标 CLOSE @CURSOR_Result -- 6. 删除游标 DEALLOCATE @CURSOR_Result -- Delete overtime item, set active=0:changeTime<getdate()-48; UPDATE PRT.TEST_TABLE SET active=0 WHERE changeTime < dateadd(HOUR, -@overTimeHour, getdate()) END
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
刺客信条阴影:贝壳谜语解决方案
3 周前ByDDD
Windows 11 KB5054979中的新功能以及如何解决更新问题
2 周前ByDDD
在哪里可以找到原子中的起重机控制钥匙卡
3 周前ByDDD
节省R.E.P.O.解释(并保存文件)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
刺客信条阴影 - 如何找到铁匠,解锁武器和装甲定制
4 周前ByDDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境