加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver2005游标的使用

发布时间:2020-12-12 15:31:36 所属栏目:MsSql教程 来源:网络整理
导读:从数据库里面逐行逐行取出来,然后再依次进行update,或者修改操作,这时候需要游标 SET NOCOUNT ON USE MB GO --定义变量 DECLARE @Enterprise_ID??? BigInt, ??? @Contact_ID???? BigInt, ??? @Bilateral_ID??? INT, ??? @Activity_ID??? INT, ??? @Activi

从数据库里面逐行逐行取出来,然后再依次进行update,或者修改操作,这时候需要游标

SET NOCOUNT ON
USE MB
GO

--定义变量
DECLARE @Enterprise_ID??? BigInt,
??? @Contact_ID???? BigInt,
??? @Bilateral_ID??? INT,
??? @Activity_ID??? INT,
??? @Activity_Code??? Char(36),
??? @Next_Call_Date??? datetime,

????? @VIN????? VarChar(30),
??? @Contract_date??? VarChar(30),
??? @Account_Number????? VarChar(30),
??? @Purchase_date??? VarChar(30),
??? @Model????? VarChar(30),
??? @Branch_Number????????? VarChar(30),
??? @NewOrUsed???? VarChar(30),
??? @Mature_date??? VarChar(30),
??? @Dealer_Number????????? VarChar(30),

??? @Term_Number??? VarChar(20),
??? @Last_Update_By??? VarChar(20)

SET @Activity_ID = 553??? -- 553 --Production Activity_ID
SET @Last_Update_By = 'Napoleon'
SET @Next_Call_Date = Convert(DateTime,Convert(VarChar(10),DateAdd(Day,1,GetDate()),121) + ' 9:00:00')

---声明cursor

DECLARE tempInput CURSOR

FOR
SELECT
?? c.Bilateral_ID,
?? c.Enterprise_ID,
?? c.Contact_ID,
?? VIN = LEFT(t.VIN,20),
?? t.Purchase_Date,
?? t.Decoded_Model,
?? NewOrUsed =
?? case
??? when t.Number_Owners ='1' then 'New'
??? else 'Used'
?? end,
?? t.Maturity_Date,
?? t.Selling_Dealer_Code,
?? Term =CONVERT(VarChar(20),dv.TERM)
FROM dragnet_5064_ticket_7561_20081103 t
left join napoleon_report..data_vehicles dv on
?? t.vin = dv.vin
left join mb..Contacts_DealerContacts c on
?? dv.owner_contact_id = c.contact_id
--打开游标??

--取出了游标里的数据,然后把取出来的数据放到变量里面
--//从游标里取出数据赋值到我们刚才声明的2个变量中

Open tempInput
FETCH NEXT FROM tempInput INTO @Bilateral_ID,@Enterprise_ID,@Contact_ID,@VIN,@Purchase_date,@Model,@NewOrUsed,@Mature_date,@Dealer_Number,@Term_Number

//判断游标的状态
//0 fetch语句成功
//-1 fetch语句失败或此行不在结果集中
//-2被提取的行不存在

--然后把变量的值给 插入到所需要的表中

While (@@FETCH_STATUS <> -1)(一个while相当与一个for循环)
BEGIN (begin对应与一个end
?? SET @Activity_Code = CONVERT(Char(36),NEWID())

?? INSERT INTO act_item (Buying_Center_ID,Enterprise_ID,Contact_ID,Activity_ID,Activity_date,Activity_Code,Closed,Closed_Reason,Next_Call_Date,Next_Call_Time,Telemarketers,Bilateral_ID,rowguid,Last_Update_Date,Last_Update_By,created_by)
?? VALUES (1,@Activity_ID,getdate(),@Activity_Code,NULL,@Next_Call_Date,@Bilateral_ID,NEWID(),GetDate(),@Last_Update_By,@Last_Update_By)

?? INSERT INTO actd_dfo (Activity_Code,Row_IDName,Data)
?? VALUES (@Activity_Code,'VIN',@VIN)
??
?? INSERT INTO actd_dfo (Activity_Code,'Purchase Date',@Purchase_date)

?? INSERT INTO actd_dfo (Activity_Code,'Model',@Model)
??
?? INSERT INTO actd_dfo (Activity_Code,'New/Used',@NewOrUsed)

?? INSERT INTO actd_dfo (Activity_Code,'Maturity Date',@Mature_date)
??
?? INSERT INTO actd_dfo (Activity_Code,'Dealer Number',@Dealer_Number)

?? INSERT INTO actd_dfo (Activity_Code,'Term Number',@Term_Number)

--END(在处理程序的时候就是这个地方写错了,让我们那帮头找了很久,因为这句,他就提起end了,游标不会在往下面走了,陷入了死循环,end写在后面那个地方)

--用游标去取下一条记录
FETCH NEXT FROM tempInput INTO @Bilateral_ID,@Term_Number END
--//关闭游标
CLOSE tempInput
--//撤销游标DEALLOCATE tempInput

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读