首页 > 数据库 >SQL:打印表索引脚本

SQL:打印表索引脚本

时间:2023-08-13 12:12:05浏览次数:35  
标签:object NAME idx -- 打印 COLUMN 索引 SQL id

SQL SERVER 打印索引脚本

declare C1 cursor  for 
 -- 表索引,不包含主约束索引。 
 SELECT OBJ.OBJECT_ID AS [TABLE_ID], 
    OBJ.NAME AS [TABLE_NAME],
  --  PK.name AS CONSTRAIN_NAME,
    idx.name as index_name,
    --索引类型: 聚集索引、非聚集索引
    case WHEN idx.type = 1 then 'CLUSTERED' 
     when idx.type=2 then 'NONCLUSTERED' 
     ELSE '' END AS [INDEX_TYPE],
    CASE WHEN IDX.is_unique=1 THEN  'UNIQUE' 
    WHEN IDX.is_unique=0 THEN '不唯一'
    ELSE  '' END [IS_UNIQUE_DESC]
   -- IDXC.index_column_id,
  --  IDXC.key_ordinal,
  --  COL.name AS COLUMN_NAME
   -- ,IDX.* 
  FROM SYS.all_objects OBJ,
     --  SYS.key_constraints PK,
       sys.indexes idx
      -- sys.index_columns idxc,
      -- SYS.all_columns COL
  WHERE OBJ.type='U'
  AND OBJ.name LIKE 'AP_Vouch%'
 -- AND OBJ.object_id = PK.parent_object_id 
 -- AND PK.type='PK'
 -- and pk.parent_object_id = idx.object_id
 -- and pk.unique_index_id = idx.index_id
  and not exists ( select 1 from  SYS.key_constraints PK
   where  pk.parent_object_id = idx.object_id 
    and pk.unique_index_id = idx.index_id )
  and obj.object_id = idx.object_id
 -- AND IDX.object_id = IDXC.object_id
 -- and idx.index_id = idxc.index_id
 -- AND IDXC.object_id = COL.object_id
  --and IDXC.column_id = COL.column_id
order by  OBJ.NAME, idx.name --,IDXC.key_ordinal
;
DECLARE @TABLE_ID BIGINT,
  @TABLE_NAME NVARCHAR(128),
  @INDEX_NAME NVARCHAR(128),
  @INDEX_TYPE NVARCHAR(128),
  @IS_UNIQUE_DESC NVARCHAR(128),
  @KEY_ORDINAL INT,
  @COLUMN_NAME NVARCHAR(128),
  @RESULT NVARCHAR(4000),
  @COLUMN_LIST NVARCHAR(4000),
  @UNIQUE NVARCHAR(20);
declare @fetch_status1 int;
declare @fetch_status_idx int;  
BEGIN
  OPEN C1 ;
  FETCH NEXT FROM C1 INTO @TABLE_ID, @TABLE_NAME, @INDEX_NAME, @INDEX_TYPE,@IS_UNIQUE_DESC--, @KEY_ORDINAL ,@COLUMN_NAME; 
  set @fetch_status1 =@@FETCH_STATUS
  WHILE @FETCH_STATUS1 = 0
  BEGIN
    IF @IS_UNIQUE_DESC = 'UNIQUE' 
       SET @UNIQUE = ' UNIQUE ';
    ELSE 
       SET @UNIQUE =' ';
    
    SET @COLUMN_LIST ='';
    -- 索引字段
    declare c_idxc cursor for
     select IDXC.key_ordinal,
            COL.name AS COLUMN_NAME
      from sys.indexes idx,
           sys.index_columns idxc,
       SYS.all_columns COL
       where IDXC.object_id = COL.object_id
        and IDXC.column_id = COL.column_id
        AND IDX.index_id = IDXC.index_id
        and idxc.object_id = @table_id
        AND IDX.name = @INDEX_NAME
        ORDER BY IDXC.key_ordinal;
      open c_idxc ;
      fetch next from c_idxc into  @key_ordinal, @column_name 
      set @fetch_status_idx = @@FETCH_STATUS 
      while @fetch_status_idx = 0
      begin
        set @COLUMN_LIST = @COLUMN_LIST + @COLUMN_NAME + ',';
        fetch next from c_idxc into  @key_ordinal, @column_name 
        set @fetch_status_idx = @@FETCH_STATUS 
      end;
      close c_idxc;
      deallocate c_idxc;

      IF @COLUMN_LIST!=''  
        SET @COLUMN_LIST = LEFT(@COLUMN_LIST,LEN(@COLUMN_LIST)-1);
      
    SET @RESULT='CREATE '+ @UNIQUE + @INDEX_TYPE +' INDEX '+ @INDEX_NAME +' ON '+ @TABLE_NAME 
     + '( '+ @COLUMN_LIST + ' );'+CHAR(13);
     PRINT @RESULT; 
    -- PRINT 'GO'; 
    FETCH NEXT FROM C1 INTO @TABLE_ID, @TABLE_NAME, @INDEX_NAME, @INDEX_TYPE,@IS_UNIQUE_DESC--, @KEY_ORDINAL ,@COLUMN_NAME ;
    set @fetch_status1 = @@FETCH_STATUS;
  END ;
   
  CLOSE C1;
  DEALLOCATE C1;

END ;

  

标签:object,NAME,idx,--,打印,COLUMN,索引,SQL,id
From: https://www.cnblogs.com/samrv/p/17626366.html

相关文章

  • Go语言gorm框架MySQL实践
    gorm是一个使用Go语言编写的ORM框架。文档齐全,对开发者友好,支持主流数据库。我最近在补齐Go语言各类基础的框架和操作库的知识,终于进展到了数据库阶段,搜资料的时候基本都是推荐这个框架,可见其之流行程度。在不断尝试练习之后,总结了一些经验和使用方式,供初学者参考。在之前使用Jav......
  • SQL:索引表索引
    SQLSERVER2008R2 查询数据库表索引,不包含主约束索引--表索引,不包含主约束索引。SELECTOBJ.OBJECT_IDAS[TABLE_ID],OBJ.NAMEAS[TABLE_NAME],--PK.nameASCONSTRAIN_NAME,idx.nameasindex_name,--索引类型:聚集索引、非聚集索引caseW......
  • SQL:主约束索引
    SQLSERVER 主约束索引--主约束索引SELECTOBJ.OBJECT_IDAS[TABLE_ID],OBJ.NAMEAS[TABLE_NAME],PK.nameASCONSTRAIN_NAME,idx.nameasindex_name,IDXC.index_column_id,IDXC.key_ordinal,COL.nameASCOLUMN_NAMEFROMSYS.all_ob......
  • PowerShell 使用SqlScriptDOM对T-SQL做规则校验
    ​ 对于数据项目来说,编写Sql是一项基本任务同时也是数量最多的代码。为了统一项目代码规范同时降低CodeReview的成本,因此需要通过自动化的方式来进行规则校验。由于本人所在的项目以SQLServer数据库为基础,于是本人决定通过使用SqlScriptDom类库来做T-SQL的规则校验。如果是其......
  • sql优化
    sql优化参考博客:SQL优化的几种方法常见的SQL优化方法sql优化的N种方法_持续更新史上最全SQL优化方案sql语句用大写解析sql语句时,把小写的字母转换成大写的再执行对查询进行优化,应尽量避免全表扫描,首先考虑在where及orderby上建立索引。应尽量避免在where子句中进行以......
  • 高性能MySQL 七-十六
    七、MySQL高级性能7.1分区表MySQL在创建表时使用PARTITIONBY子句定义每个分区存放的数据分区的一个主要目的是将数据按照一个较粗的力度分在不同的表中。这样做可以将相关的数据存放在一起1)分区表的原理SELECT查询:当查询一个分区表的时候,分区层先打开并锁住所有的底层表,......
  • ChatGPT联网查询基于yahoo搜索引擎
    联网查询原理很简单1.对搜索内容分词2.将分词后的内容用yahoo搜索3.将搜索返回的内容交给ChatGPT整理提炼Demo代码如下importfetchfrom'node-fetch';importSegmentfrom'segment';import{HttpsProxyAgent}from'https-proxy-agent';constproxyUrl='http://1......
  • e、PLSQL
    PL/SQLPL/SQL简介详情详见《Oracle从入门到精通(第3版)明日科技》的5章https://www.oraclejsq.com/plsql/010200446.htmlPL/SQL(ProceduralLanguage/SQL)是一种过程化语言,在PL/SQL中可以通过IF语句或LOOP语句实现控制程序的执行流程,甚至可以定义变量,以便在语句之间传递数据......
  • d、SQL语言
    SQL语言SQL全称是结构化查询语言,英文译作StructuredQueryLanguage,它是一种在关系型数据库中定义和操纵数据的标准语言。最早是由IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEMR开发的一种查询语言,当时称为SEQUEL2,也就是目前的SQL语言。1979年Oracle公司首先提供了商用......
  • c、SQLPlus命令
    SQL*Plus命令SQL*Plus与数据库的交互Oracle的SQL*Plus是与Oracle进行交互的客户端工具,在SQL*Plus中,可以运行SQL*Plus命令与SQL*Plus语句,主要介绍SQL*Plus命令。SQL*Plus是一个基于C/S两层结构的客户端操作工具,包括客户层(即命令行窗口)和服务器层(即数据库实例),这两层既可以在一......