zoukankan      html  css  js  c++  java
  • sql server 索引检测

    -- 声明表变量
    DECLARE @userTable TABLE (table_name NVARCHAR(20));
    
    -- 将源表中的数据插入到表变量中
    INSERT INTO @userTable(table_name) SELECT name FROM sysobjects WHERE xtype = 'U' AND name LIKE 'user_[1234567890]%';
    
    -- 声明变量
    DECLARE @sql NVARCHAR(MAX),@index_name NVARCHAR(30),@table_name NVARCHAR(20);
    WHILE EXISTS(SELECT table_name FROM @userTable)
        BEGIN
            SELECT @table_name = table_name FROM @userTable ORDER BY table_name;
            BEGIN TRY
                --检查索引
                SET @index_name = 'IX_' + @table_name;
                IF NOT EXISTS(SELECT 1 FROM sysindexes a 
                                       JOIN sysindexkeys b ON a.id = b.id AND a.indid = b.indid 
                                       JOIN sysobjects c ON b.id = c.id
                                       JOIN syscolumns d ON b.id = d.id AND b.colid = d.colid
                                       WHERE a.indid NOT IN(0,255) AND c.xtype = 'U' AND c.name = @table_name AND a.name = @index_name)
                BEGIN
                    SET @sql='CREATE NONCLUSTERED INDEX '+@index_name+' ON '+@table_name+'(userId ASC)
                              INCLUDE(id,......)
                              WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]'
                    EXEC (@sql);
                END
                --检查唯一索引
                SET @index_name='IXDistinct_' + @table_name;
                IF NOT EXISTS(SELECT 1 FROM sysindexes a 
                                       JOIN sysindexkeys b ON a.id=b.id AND a.indid=b.indid 
                                       JOIN sysobjects c ON b.id=c.id 
                                       JOIN syscolumns d ON b.id=d.id AND b.colid=d.colid
                                       WHERE a.indid NOT IN(0,255) AND c.xtype='U' AND c.name=@table_name AND a.name=@index_name)
            BEGIN
                SET @sql='ALTER TABLE ' + @table_name + ' ADD  CONSTRAINT '+@index_name+' UNIQUE NONCLUSTERED(userId ASC,.....)
                          WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]'
                EXEC (@sql);
                EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'userId和....组成的唯一键索引' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=@table_name, @level2type=N'CONSTRAINT',@level2name=@index_name
            END
            END TRY
            BEGIN CATCH
              SELECT @table_name AS tablename,
                  ERROR_MESSAGE() AS ErrorMessage,
                     ERROR_SEVERITY() AS ErrorSeverity,
                     ERROR_STATE() AS ErrorState    
            END CATCH 
            DELETE FROM @userTable WHERE table_name=@table_name;
        END
  • 相关阅读:
    点赞功能实现 $(tag).css('属性', '样式')
    ul li的添加 删除 复制 clone()
    Java 面向对象之构造函数和 this 关键字
    Java 面向对象编程介绍
    Java 语言基础之数组应用
    Java 语言基础之数组常见操作
    Java 语言基础之数组(一)
    Java 语言基础之函数
    Java 语言基础之语句
    Java 语言基础之运算符
  • 原文地址:https://www.cnblogs.com/zhm001/p/14543167.html
Copyright © 2011-2022 走看看