微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sqlserver2005游标的使用

数据库里面逐行逐行取出来,然后再依次进行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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐