首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建存储过程以禁用和启用索引

创建存储过程以禁用和启用索引
EN

Database Administration用户
提问于 2020-08-17 20:21:16
回答 1查看 93关注 0票数 -1

下面有两个查询,首先,禁用索引,在另一个查询中启用索引。这是我的疑问

代码语言:javascript
复制
--Disabling indexes
DECLARE @my_sql2 NVARCHAR(200);
DECLARE cur_rebuild CURSOR FOR 
SELECT 'ALTER INDEX ' +  i.name + ' ON ' + t.name + ' DISABLE' 
FROM sys.indexes i JOIN sys.tables t ON i.object_id = t.object_id
WHERE i.is_disabled = 1 ORDER BY t.name, i.name;

OPEN cur_rebuild;

FETCH NEXT FROM cur_rebuild INTO @my_sql2;

WHILE @@FETCH_STATUS = 0

BEGIN

   EXECUTE sp_executesql  @my_sql2;

   FETCH NEXT FROM cur_rebuild INTO @my_sql2;

END;

CLOSE cur_rebuild;

DEALLOCATE cur_rebuild;

GO

代码语言:javascript
复制
--rebuilding indexes
DECLARE @my_sql2 NVARCHAR(200);

DECLARE cur_rebuild CURSOR FOR 

SELECT 'ALTER INDEX ' +  i.name + ' ON ' + t.name + ' REBUILD' 
FROM sys.indexes i JOIN sys.tables t ON i.object_id = t.object_id 
WHERE i.is_disabled = 1 ORDER BY t.name, i.name;

OPEN cur_rebuild;

FETCH NEXT FROM cur_rebuild INTO @my_sql2;

WHILE @@FETCH_STATUS = 0

BEGIN

   EXECUTE sp_executesql  @my_sql2;

   FETCH NEXT FROM cur_rebuild INTO @my_sql2;

END;

CLOSE cur_rebuild;

DEALLOCATE cur_rebuild;

GO

我想知道是否有人能帮我为这两个查询创建两个存储过程?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2020-08-18 13:55:19

最后,我设法为每个进程编写了一个SP。

下面是禁用索引:

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[DisableNonClusteredIndexes]
 @tableName VARCHAR(100)
AS
SET nocount ON;
DECLARE @my_sql2 NVARCHAR(200);
DECLARE cur_rebuild CURSOR FOR 
 SELECT 'ALTER INDEX ' +  i.name + ' ON ' + t.name + ' DISABLE'
 FROM sys.indexes I 
 JOIN sys.tables t ON i.object_id = t.object_id 
 WHERE i.is_disabled = 1 and t.name= @tableName
 ORDER BY t.name, i.name;
 OPEN cur_rebuild;
 FETCH NEXT FROM cur_rebuild INTO @my_sql2;
 WHILE @@FETCH_STATUS = 0
 BEGIN
    EXECUTE sp_executesql  @my_sql2;
    FETCH NEXT FROM cur_rebuild INTO @my_sql2;
 END;
 CLOSE cur_rebuild;
 DEALLOCATE cur_rebuild;
 GO

下面是启用/重建索引:

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[EnableNonClusteredIndexes]
  @tableName VARCHAR(100)
AS
SET nocount ON;
DECLARE @my_sql2 NVARCHAR(200);
DECLARE cur_rebuild CURSOR FOR 
  SELECT 'ALTER INDEX ' +  i.name + ' ON ' + t.name + ' REBUILD' 
  FROM sys.indexes I 
  JOIN sys.tables t ON i.object_id = t.object_id 
  WHERE i.is_disabled = 1 and t.name = @tableName
  ORDER BY t.name, i.name;
OPEN cur_rebuild;
FETCH NEXT FROM cur_rebuild INTO @my_sql2;
WHILE @@FETCH_STATUS = 0
 BEGIN
   EXECUTE sp_executesql  @my_sql2;
   FETCH NEXT FROM cur_rebuild INTO @my_sql2;
 END;
CLOSE cur_rebuild;
DEALLOCATE cur_rebuild;
GO
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/273895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档