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

具体代码如下所示:

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

--定义遍历的表变量@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

测试效果:

SqlServer中使用游标进行双重遍历_遍历SqlServer中使用游标进行双重遍历_字段_02