首页 > 数据库 >SQL:多个游标嵌套实例

SQL:多个游标嵌套实例

时间:2023-01-19 08:11:55浏览次数:35  
标签:NAME -- OBJECT 游标 FETCH 嵌套 SQL TB ID

 

SQL Server 2008R2 环境多个游标嵌套使用例子。

打印系统的用户表以及表的列清单

/*
Author: Samrv8
Date: 2023-1-19
Description: 打印系统的用户表以及表的列清单
环境: SQL SERVER 2008R2 
*/
DECLARE C1 CURSOR FOR 
SELECT TB.NAME AS TABLE_NAME, TB.OBJECT_ID 
  FROM SYS.TABLES  TB
 WHERE TB.TYPE= 'U' 
-- AND TB.NAME IN ( 'EBCFG','SEWST')
 ORDER BY TB.NAME ;

/*
 -- SWEI	994102582
DECLARE C2 CURSOR FOR 
 SELECT COL.NAME AS COLUMN_NAME 
  FROM SYS.ALL_columns COL,
 SYS.TABLES  TB
  WHERE TB.OBJECT_ID = COL.OBJECT_ID
   AND TB.TYPE= 'U'
   --AND COL.OBJECT_ID = 994102582
   AND TB.NAME = @TABLE_NAME  
ORDER BY COL.OBJECT_ID, COL.COLUMN_ID;
*/
DECLARE @TABLE_NAME NVARCHAR(32);  -- 表名
DECLARE @COLUMN_NAME NVARCHAR(32);  -- 列名
DECLARE @OBJECT_ID BIGINT;  -- 对象ID
DECLARE @FETCH_STATUS1 INT;  -- 表游标状态 
DECLARE @FETCH_STATUS2 INT;  -- 列游标状态

OPEN C1 
FETCH NEXT FROM C1 INTO @TABLE_NAME ,@OBJECT_ID
SET @FETCH_STATUS1 = @@FETCH_STATUS;
WHILE @FETCH_STATUS1 = 0 
BEGIN 
   PRINT 'SELECT TOP 90 * FROM '+ @TABLE_NAME +' ;';
   PRINT '/*';
    -- SWEI	994102582
DECLARE C2 CURSOR FOR 
 SELECT COL.NAME AS COLUMN_NAME 
  FROM SYS.ALL_columns COL,
 SYS.TABLES  TB
  WHERE TB.OBJECT_ID = COL.OBJECT_ID
   AND TB.TYPE= 'U'
  -- AND COL.OBJECT_ID = 994102582
  AND TB.NAME = @TABLE_NAME  
ORDER BY COL.OBJECT_ID, COL.COLUMN_ID;

   OPEN C2 
   FETCH NEXT FROM C2 INTO @COLUMN_NAME 
   SET @FETCH_STATUS2 = @@FETCH_STATUS;
   WHILE @FETCH_STATUS2 = 0 
   BEGIN 
     PRINT ''+ @COLUMN_NAME + ':';
	 FETCH NEXT FROM C2 INTO @COLUMN_NAME;
	 SET @FETCH_STATUS2 = @@FETCH_STATUS;
   END ; -- END C2; 
   close C2;                   --关闭游标
   deallocate C2;
    PRINT '*/';
FETCH NEXT FROM C1 INTO @TABLE_NAME ,@OBJECT_ID; 
SET @FETCH_STATUS1 = @@FETCH_STATUS;
END ; -- END C1;
close C1                   --关闭游标
deallocate C1;

  

标签:NAME,--,OBJECT,游标,FETCH,嵌套,SQL,TB,ID
From: https://www.cnblogs.com/samrv/p/17061009.html

相关文章

  • webFlux routers 嵌套路由解析规则
    有下列路由publicRouterFunction<ServerResponse>doctorRoutes(DoctorHandlerhandler){returnRouterFunctions.route().path("/doctors"......
  • mysql事务优化
    我们对数据进行sql操作,就是从从磁盘上取出数据(页),存放在内存中,但是并不是只有我们一个人再用,还有其他的进程也在使用内存,MySQL中有一个单独的区域存放我们的页数据(BufferPo......
  • 如何使用sqlmap爆库和挂马
    ​这篇文章讲述一下sqlmap的基本使用,爆库和挂马。安装sqlmap: 这篇文章讲述一下sqlmap的基本使用,爆库和挂马。 windows:(1)安装python并配置环境PythonReleasesforWin......
  • 浅谈如何设计MySQL索引
    文章目录​​一、索引的代价​​​​二、如何设计索引​​​​1、索引列的类型尽量小​​​​2、索引的选择离散性高的​​​​3、只为用于搜索、排序或分组的列创建索引​......
  • SQL注入基础及SQLmap
    SQL注入基础及SQLmap一、数据库基础1.数据库基本概念Oracle、MySQL、SQLServer、Access、DB2、Sqlite3都使用SQL语言(增删改查等基础内容相同,扩展内容各不相同)SQL:结构......
  • MySQL如何快速禁用账户登入 & 如何复制/复用账户密码
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:叶金荣文章来源:GreatSQL社区原创......
  • Mysql之以月为单位给表建立分区
    以月为单位给表建立分区ALTERTABLExxxxPARTITIONBYRANGE(to_days(`CREATE_TIME`))(PARTITIONfrom202301VALUESLESSTHAN(TO_DAYS('2023-02-01')),PARTITION......
  • 通过Canal将云上MySQL数据同步到华为云ES(CSS)中
    背景:A部门想将mysql中多张表join成一个sql查询语句,然后将结果同步到es中供搜索使用环境信息:源端mysql在阿里云上,有公网ip目标端es在华为云上,三节点操作步骤与目......
  • docker远程进入Mysql数据库报1251错误
    docker远程连接mysql数据库报1251错误,如下图所示。   解决方法:1、进入容器dockerexec-itmysql/bin/bash#mysql为数据库容器名称   2、进入mysql输......
  • SQL258 找到每个人的任务
    题目描述有一个person表,主键是id,有一个任务(task)表如下,主键也是id请你找到每个人的任务情况,并且输出出来,没有任务的也要输出,而且输出结果按照person的id升序排序思路......