SqlServer中使用游标进行双重遍历

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:17   1543   0

示例场景:循环遍历数据库中所有的数据表,然后再遍历每张数据表中的所有字段描述。

具体代码如下所示:

/*****************************************
 实例:使用游标进行双重遍历
*****************************************/

--定义遍历的表变量@TableName和数据表游标C_Table
DECLARE @TableName NVARCHAR(100)
--查询出数据库所有的用户表
DECLARE C_Table CURSOR FOR SELECT name FROM sysobjects WHERE xtype='u'
--打开游标、获取第一条数据
OPEN C_Table
FETCH NEXT FROM C_Table INTO @TableName
WHILE(@@FETCH_STATUS=0)
BEGIN
 --这里就是循环遍历的数据表名称
 --PRINT @TableName

 --遍历表@TableName的字段
 --定义遍历的字段名称变量@TableFieldName、字段描述变量@TableFieldDesc和表字段游标C_TableField
 DECLARE @TableFieldName NVARCHAR(100),
  @TableFieldDesc NVARCHAR(100)
 --查询出该数据表所有的字段及其描述
 DECLARE C_TableField CURSOR FOR
  SELECT b.name TableFieldName,CAST(c.value AS NVARCHAR(100)) TableFieldDesc FROM sys.tables a
  INNER JOIN sys.columns b ON b.object_id = a.object_id
  LEFT JOIN sys.extended_properties c ON c.major_id = b.object_id AND c.minor_id = b.column_id
  WHERE a.name =@TableName
 --打开游标、获取第一条数据
 OPEN C_TableField
 FETCH NEXT FROM C_TableField INTO @TableFieldName,@TableFieldDesc
 WHILE(@@FETCH_STATUS=0)
 BEGIN
  --这里就是循环遍历的字段名称和描述
  PRINT '数据表:'+@TableName+',字段:'+@TableFieldName+',描述:'+@TableFieldDesc

  FETCH NEXT FROM C_TableField INTO @TableFieldName,@TableFieldDesc
 END
 CLOSE C_TableField
 DEALLOCATE C_TableField

 FETCH NEXT FROM C_Table INTO @TableName
END
--关闭和释放游标
CLOSE C_Table
DEALLOCATE C_Table

测试效果:

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP