1

我正在尝试处理我们程序中的升级组件。这需要更改索引的名称

EXEC sp_rename N'Sig_Summary1Index.IX_Sig_Summary1Index_StartTime',

N'Sig_Summary3Index.IX_Sig_Summary1Index1_StartTime', N'INDEX';

(我们需要与 SQL SERVER 2005 保持兼容)

然后检查它是否存在于同一个事务中:

IF NOT EXISTS 
(   SELECT * 
    FROM sys.indexes 
    WHERE object_id = OBJECT_ID(N'[dbo].[Sig_Summary1Index]' ) 
        AND name = N'[IX_Sig_Summary1Index1_StartTime]') 

CREATE CLUSTERED INDEX [IX_Sig_Summary1Index1_StartTime] 
ON [dbo].[Sig_Summary1Index] (  
    [StartTime] 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, 
    FILLFACTOR = 95
) 
ON [PRIMARY]

这将尝试创建索引。:(不知何故,在事务期间,sys.indexes表还没有更新。有没有其他方法可以避免创建这个索引?

编辑:有什么办法可以“刷新” sys 表来更新?手动插入记录?做一些事情以使“检查”不会改变?

4

2 回答 2

2

sys.tables 始终与 CREATE INDEX 完美同步。如果您的查询未找到,则意味着它查找错误的索引名称。如果您在事务中运行 CREATE INDEX,然后在提交之前从另一个事务中查看 sys.tables ,您将陷入普通的读取隔离级别,并且在事务提交之前您不会看到新索引。这是预期和期望的行为。

于 2010-02-24T16:18:40.047 回答
0

我倾向于检查索引是否以旧名称存在,如果它确实删除它,GO

使用新名称 GO 重新创建索引。

它更简单。

于 2010-02-24T16:07:00.403 回答