我正在尝试在我们的程序中处理升级组件。 这需要更改索引的名称
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表来更新?手动插入记录?做一些事情,以便“检查”不会改变?
答案 0 :(得分:2)
sys.tables始终与CREATE INDEX完美同步。如果您的查询未找到,则表示它查找错误的索引名称。如果你在一个事务中运行CREATE INDEX fron然后在提交之前,从另一个事务中查看sys.tables,你会陷入普通的读隔离级别,你将看不到新的索引。事务提交。这是预期和期望的行为。
答案 1 :(得分:0)
我倾向于检查索引是否存在旧名称,如果它确实丢弃它,GO
使用新名称GO重新创建索引。
这更简单。