ここで説明されているような問題が発生しています。
mssql のトランザクション内でフルテキスト インデックスを強制的に更新するにはどうすればよいですか?
ただし、そこに掲載されている推奨される解決策は機能しません。同じスレッドにフォローアップを投稿しようとしましたが、モデレーターによって削除されました。だから私は新しい質問を始めています。
元のクエリと同様に、トランザクション内で単体テストを実装しようとしています。フルテキスト インデックス付きの列にデータを挿入し、データをクエリしてその有効性を確認し、後で挿入をロールバックしたいと考えています。
問題は、トランザクションをコミットするまでインデックスが更新されないように見えることです。「WAITFOR DELAY」アプローチを試しましたが、どれだけ待っても、トランザクションがコミットされるまでインデックスは更新されません。
これが私がやろうとしていることのサンプルです:
BEGIN TRAN
INSERT INTO AMMS.Content
(
ContentTypeId,
Name,
ImportDate,
IsDeleted,
LastModifiedBy,
LastModifiedAt,
DisplayInPortal,
StatusId
)
VALUES
(
4,
'my unit test content',
GETUTCDATE(),
0,
1,
GETUTCDATE(),
1,
2
)
declare @count int
set @count = 0
while @count < 10
begin
SELECT FULLTEXTCATALOGPROPERTY('PRIMARY', 'PopulateStatus') AS Status
select * from amms.Content where contains(Name, 'unit')
waitfor delay '00:00:01'
set @count = @count + 1
end
populate ステータスは 9 のままで、トランザクションが保留中の間、select は行を返しません。コミットすると、移入ステータスは0を返し、選択は期待どおりに単一の行を返します。
何か不足していますか?これを達成する別の方法はありますか?この動作は、SQL Server のバージョンが異なると異なりますか? (私は現在2008を使用してテストしています)