zoukankan      html  css  js  c++  java
  • 数据库的索引查找

    declare @name varchar(50);
    declare @ALTER varchar(50);
    SET @ALTER = ' ALTER TABLE ';
    declare @CONSTRAINT varchar(50);
    SET @CONSTRAINT = ' ADD CONSTRAINT ';
    declare @PRIMARY varchar(50);
    SET @PRIMARY = ' PRIMARY KEY ';
    declare @UNIQUE varchar(50);
    SET @UNIQUE = ' UNIQUE ';
    declare @CREATE varchar(50);
    SET @CREATE = ' CREATE ';
    declare @INDEX varchar(50);
    SET @INDEX = ' INDEX ';
    declare @INCLUDE varchar(50);
    SET @INCLUDE = ' INCLUDE (';
    declare @ON varchar(50);
    SET @ON = ' ON ';
    declare @DESC varchar(50);
    SET @DESC = ' DESC ';
    declare @null varchar(50);
    SET @null = '';
    declare @qx varchar(50);
    SET @qx = '(';
    declare @hx varchar(50);
    SET @hx = ')';
    declare @qz varchar(50);
    SET @qz = '[';
    declare @hz varchar(50);
    SET @hz = ']';
    declare @dh varchar(50);
    SET @dh = ',';
    declare @d varchar(50);
    SET @d = '.';
    declare @tmp table (
    DATABASENAME varchar(50),
    Create_Index varchar(max),
    ix_name varchar(max),
    table_name varchar(max)
    )
    --执行sql语句变量
    declare @STMT nvarchar(max) -- SQL to execute
    declare cur_data SCROLL cursor for
    SELECT Name FROM Master..SysDatabases ORDER BY Name
    open cur_data
    fetch next from cur_data into @name
    while(@@fetch_status=0)
    begin
    SELECT @STMT ='BEGIN
    WITH tx AS
    (
    SELECT a.object_id
    ,b.name AS schema_name
    ,a.name AS table_name
    ,c.name as ix_name
    ,c.is_unique AS ix_unique
    ,c.type_desc AS ix_type_desc
    ,d.index_column_id
    ,d.is_included_column
    ,e.name AS column_name
    ,f.name AS fg_name
    ,d.is_descending_key AS is_descending_key
    ,c.is_primary_key
    ,c.is_unique_constraint
    FROM ['+@name+'].sys.tables AS a
    INNER JOIN ['+@name+'].sys.schemas AS b ON a.schema_id = b.schema_id AND a.is_ms_shipped = 0
    INNER JOIN ['+@name+'].sys.indexes AS c ON a.object_id = c.object_id
    INNER JOIN ['+@name+'].sys.index_columns AS d ON d.object_id = c.object_id AND d.index_id = c.index_id
    INNER JOIN ['+@name+'].sys.columns AS e ON e.object_id = d.object_id AND e.column_id = d.column_id
    INNER JOIN ['+@name+'].sys.data_spaces AS f ON f.data_space_id = c.data_space_id
    )
    SELECT '+''''+@name+'''' +' AS DATABASENAME,
    Create_Index = CASE WHEN (a.is_primary_key = 1 OR a.is_unique_constraint = 1)
    THEN '+''''+ @ALTER +''''+' + a.table_name + '+''''+@CONSTRAINT+''''+' + a.ix_name
    + CASE WHEN a.is_primary_key = 1 THEN '+''''+ @PRIMARY+''''+' ELSE '+''''+@UNIQUE+''''+' END +'+''''+@qx+''''+'+ indexColumns.ix_index_column_name +'+''''+@hx++'''
    ELSE '+''''+ @CREATE+''''+' + CASE WHEN a.ix_unique = 1 THEN '+''''+@UNIQUE+''''+' ELSE '+''''+''''+' END
    + a.ix_type_desc + '+''''+@INDEX+''''+' + a.ix_name collate SQL_Latin1_General_CP1_CI_AS + '+''''+@ON+''+'['+@name+'].'+''' + a.schema_name
    + '+''''+@d++''' + a.table_name + '+''''+@qx+''''+' + indexColumns.ix_index_column_name + '+''''+@hx+''''+'
    + CASE WHEN IncludeIndex.ix_included_column_name IS NOT NULL THEN '+''''+@INCLUDE+''''+' + IncludeIndex.ix_included_column_name + '+''''+@hx+''''+' ELSE '+''''+''''+' END +
    '+''''+@ON+@qz+''''+'+ a.fg_name + '+''''+@hz+''''+' END
    ,a.ix_name
    ,a.table_name
    FROM
    (
    SELECT DISTINCT
    ix_unique
    ,ix_type_desc
    ,ix_name
    ,schema_name
    ,table_name
    ,fg_name
    ,is_primary_key
    ,is_unique_constraint
    FROM tx
    ) AS a
    OUTER APPLY
    (
    SELECT ix_index_column_name
    = STUFF((
    SELECT '+''''+@dh+''''+' + column_name + CASE WHEN is_descending_key = 1 THEN '+''''+@DESC+''''+' ELSE '+''''+''''+' END
    FROM tx AS b
    WHERE schema_name = a.schema_name
    AND table_name=a.table_name
    AND ix_name=a.ix_name
    AND ix_type_desc=a.ix_type_desc
    AND fg_name=a.fg_name
    AND is_included_column=0
    ORDER BY index_column_id
    FOR XML PATH('+''''+''''+')
    ),1,1,'+''''+''''+')
    )IndexColumns
    OUTER APPLY
    (
    SELECT ix_included_column_name
    = STUFF((
    SELECT '+''''+@dh+''''+'+ column_name
    FROM tx AS b
    WHERE schema_name = a.schema_name
    AND table_name=a.table_name
    AND ix_name=a.ix_name
    AND ix_type_desc=a.ix_type_desc
    AND fg_name=a.fg_name
    AND is_included_column=1
    ORDER BY index_column_id
    FOR XML PATH('+''''+''''+')
    ), 1,1,'+''''+''''+')
    )IncludeIndex
    ORDER BY a.schema_name,a.table_name,a.ix_name;
    END'
    insert into @tmp
    exec sp_executesql @STMT ;


    fetch next from cur_data into @name
    end;
    close cur_data
    DEALLOCATE cur_data

    select * from @tmp

  • 相关阅读:
    Netty(一、初步了解)
    nginx(三、keepalived高可用)
    nginx(二、配置文件)
    nginx(一、安装与启动)
    ElasticSeach(六、springboot集成ES high level client)
    ElasticSeach(五、命令操作)
    ElasticSeach(四、mapping)
    ElasticSeach(三、IK分词器配置)
    ElasticSeach(二、部署运行)
    ElasticSeach(一、基本概念)
  • 原文地址:https://www.cnblogs.com/fyy1003668657/p/14583169.html
Copyright © 2011-2022 走看看