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 に答える