游标的一个例子

 

-- -Author:Sam Lin
--
-Date:Nov.08,2007
--
-Memo:导入通用查询数据

CREATE   Procedure  GetCommonQueryItems
(
    
@TableName   VarChar ( 100 ),    -- 表/视图名称
     @BusinessPageName   VarChar ( 255 -- 业务页面名称
)
AS
Begin
print   @TableName
    
Declare   @ItemID   int       -- 生成数据的ID
     DeClare   @ItemsCount   int   -- 对某一类数据的统计
     DeClare   @Items_Cursor   Cursor      -- 声明游标
     DeClare   @ItemName   VarChar ( 50 )    -- 字段名
     DeClare   @ItemDataType   VarChar ( 50 )
    
Set   @ItemID   =   0
             
Select   @ItemsCount   =   Count (ID)  From  Sys_Query
    
If ( @ItemsCount   >   0 )
        
Select   @ItemID   =   Max (ID)  from  Sys_Query
print   @ItemID
    
Select   @ItemsCount   =   Count (ID)  From  Sys_Query  Where  TableName  =   @TableName   And  BusinessPageName  =   @BusinessPageName
    
If  ( @ItemsCount   >   0 )
    
Begin
        
Select   @ItemID   =  ID  From  Sys_Query 
            
Where  TableName  =   @TableName   And  BusinessPageName  =   @BusinessPageName     
    
End
    
Else
    
Begin     
    
Set   @ItemID   =   Convert ( int , @ItemID +   1
    
End
print   @ItemID
    
-- -开始执行游标
     Begin   Tran
        
Set   @Items_Cursor   =   Cursor   For
            
Select   -- @ItemID,
                A.Name  As  FieldName,
                C.Name 
As  FieldType -- ,
                 -- '50' As FieldSize,
                 -- B.Name AS TableName,
                 -- @BusinessPageName As BusinessPageName,
                 -- Null,
                 -- 99 As OrderID,
                 -- 0 As IsVisible
             From  SysColumns A,
                 SysObjects B,
                 SysTypes C
            
Where  A.ID  =  B.ID  And  A.xtype  =  C.xtype
            
And  B.Name  =   @TableName
            
And  C.Name  Not   Like   ' %DOM% '
            
And  C.Name  Not   Like   ' %IDE% '
            
And  C.Name  Not   Like   ' %sysname% '
        
-- 打开游标
         Open   @Items_Cursor
        
-- 取数据
         Fetch   Next   From   @Items_Cursor   Into    @ItemName , @ItemDataType
            
        
While   @@Fetch_Status   =   0
        
Begin

            
Select   @ItemsCount   =   Count ( * From  Sys_Query  Where  
                    FieldName 
=   @ItemName   And  FieldType  =   @ItemDataType   And  
                    TableName 
=   @TableName   And  BusinessPageName  =   @BusinessPageName

            
If  ( @ItemsCount   >   0 )
            
Begin
                
Fetch   Next   From   @Items_Cursor   Into    @ItemName , @ItemDataType
                
Continue
            
End
                
            
If   @ItemsCount   =   0
            
Begin
                
Insert   Into  Sys_Query(ID,FieldName,FieldType,FieldSize,TableName,BusinessPageName)
                        
Values (
                            
@ItemID ,
                            
@ItemName ,
                            
@ItemDataType ,    
                            
' 50 ' ,
                            
@TableName ,
                            
@BusinessPageName
                            )
            
End
        
End
        
        
If   @@Error   !=   0
        
Begin
            
RollBack   Tran
            
Return
        
End     
        
Fetch   Next   From   @Items_Cursor   Into    @ItemName , @ItemDataType     
    
Commit   Tran
    
-- 关闭游标
     Close   @Items_Cursor
    
-- 释放游标
     Deallocate   @Items_Cursor
    
    
Select   *   from  Sys_Query  where  ID  =   @ItemID     
End

GO
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值