【问题标题】:SQL stored procedure drop and create indexesSQL 存储过程删除和创建索引
【发布时间】:2023-03-16 16:10:01
【问题描述】:

我需要截断一个表来刷新数据,但是这个表有一个索引视图取决于它。我正在尝试删除索引,然后截断表,然后重新创建索引。我收到一个错误,即非聚集索引不存在或我无权删除它们...代码位于如下所示的存储过程中。我假设它与存储过程中的执行顺序有关,因为手动执行代码(删除/截断/创建)是有效的。

DROP INDEX [IDX_VDetailEmergency] ON [dbo].[vFactEmergencySummary] WITH ( ONLINE = OFF )
DROP INDEX [IDX_VDetailEmergency_facility_refno] ON [dbo].[vFactEmergencySummary] WITH ( ONLINE = OFF )
DROP INDEX [IDX_VDetailEmergency_mode_of_separation_refno] ON [dbo].[vFactEmergencySummary] WITH ( ONLINE = OFF )
DROP INDEX [IDX_VDetailEmergency_period_refno] ON [dbo].[vFactEmergencySummary] WITH ( ONLINE = OFF )

truncate table DetailEmergency

CREATE UNIQUE CLUSTERED INDEX [IDX_VDetailEmergency] ON [dbo].[vFactEmergencySummary] 
(
    [facility_refno] ASC,
    [period_refno] ASC,
    [mode_of_separation_refno] ASC,
    [ed_visit_type_refno] ASC,
    [triage_category] ASC,
    [UDG_refno] ASC,
    [URG_refno] ASC,
    [URG_MDB_refno] ASC
) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

CREATE NONCLUSTERED INDEX [IDX_VDetailEmergency_facility_refno] ON [dbo].[vFactEmergencySummary] 
(
    [facility_refno] ASC
) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF,     DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

CREATE NONCLUSTERED INDEX [IDX_VDetailEmergency_mode_of_separation_refno] ON [dbo].[vFactEmergencySummary] 
(
   mode_of_separation_refno ASC
) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

CREATE NONCLUSTERED INDEX [IDX_VDetailEmergency_period_refno] ON [dbo].[vFactEmergencySummary] 
(
   period_refno ASC
) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

【问题讨论】:

  • 您可能想重新考虑在不少于 8 列上拥有一个聚集索引!这永远不会非常有效,而且会浪费大量空间,因为所有这些列也将被复制到每个非聚集索引中!

标签: sql sql-server stored-procedures indexing


【解决方案1】:

如果您可以删除和重新创建表,则可以使用 SQL Server Management Studio 执行以下步骤:

  1. 右键单击您的表所在的数据库
  2. 点击任务 -> 生成脚本
  3. 按下一步导航到选择对象
  4. 选择特定的数据库对象
  5. 选择您的餐桌
  6. 高级
  7. 在列表中找到Script DROP and CREATE,将下拉列表改为Script DROP and CREATE
  8. 如果您想在脚本中包含索引或约束等,请向下滚动
  9. 确定并选择保存到新查询窗口以在新查询窗口中查看您的脚本
  10. 下一步完成

管理愉快!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多