MSSQL2008 için herhangi bir tablo için tam dizinleri yeniden oluşturmak ve doldurmak için imleçler kullanarak oluşturduğum bir komut dosyasıdır. Bu, bir MSSQL 2000 sunucusundan geçirilen veritabanlarıyla birlikte bir üretim ortamında çalışmaktadır. Değişiklik izlemeyi kapattım ve sadece bu saklı yordamı SQL Server Agent ile çalıştırın. Express kullanıyorsanız, Görev Zamanlayıcı aracılığıyla çalıştırmak için bir VBS komut dosyası kullanabilirsiniz.
Dizinde, dizinleri doldurmaya çalışmadan önce her katalogda yeniden oluşturma yapmak önemliydi.
CREATE PROCEDURE [dbo].[rebuild_repopulate_fulltext]
AS
BEGIN
Declare @cmdA NVARCHAR(255)
Declare @cmdB NVARCHAR(255)
Declare @cmdC NVARCHAR(255)
DECLARE @Database VARCHAR(255)
DECLARE @Table VARCHAR(255)
DECLARE @cmd NVARCHAR(500)
DECLARE @fillfactor INT
DECLARE @Catalog VARCHAR(255)
DECLARE @Schema VARCHAR(255)
SET @fillfactor = 90
DECLARE DatabaseCursor CURSOR FOR
SELECT name FROM MASTER.dbo.sysdatabases
WHERE name NOT IN ('master','msdb','tempdb','model','distribution')
ORDER BY 1
OPEN DatabaseCursor
FETCH NEXT FROM DatabaseCursor INTO @Database
WHILE @@FETCH_STATUS = 0
BEGIN
-- rebuild fulltext catalog
set @cmd = 'DECLARE CatalogCursor CURSOR FOR
SELECT t.name AS TableName, c.name AS FTCatalogName, s.name as schemaname
FROM ['+ @Database + '].sys.tables t JOIN ['+ @Database +'].sys.fulltext_indexes i
ON t.object_id = i.object_id
JOIN ['+ @Database + '].sys.fulltext_catalogs c
ON i.fulltext_catalog_id = c.fulltext_catalog_id
JOIN ['+ @Database + '].sys.schemas s ON t.schema_id = s.schema_id'
--PRINT @cmd
EXEC (@cmd)
OPEN CatalogCursor
FETCH NEXT FROM CatalogCursor INTO @Table, @Catalog, @Schema
WHILE @@FETCH_STATUS = 0
BEGIN
SET @cmdB = 'USE ['+ @Database + ']; ALTER FULLTEXT CATALOG ' + @Catalog + ' REBUILD;'
--PRINT @cmdB
EXEC (@cmdB)
FETCH NEXT FROM CatalogCursor INTO @Table, @Catalog, @Schema
END
CLOSE CatalogCursor
OPEN CatalogCursor
FETCH NEXT FROM CatalogCursor INTO @Table, @Catalog, @Schema
WHILE @@FETCH_STATUS = 0
BEGIN
SET @cmdC = 'USE ['+ @Database + ']; ALTER FULLTEXT INDEX ON ['+ @Database + '].[' + @Schema + '].[' + @Table + '] START FULL POPULATION;'
--PRINT @cmdC
EXEC (@cmdC)
FETCH NEXT FROM CatalogCursor INTO @Table, @Catalog, @Schema
END
CLOSE CatalogCursor
DEALLOCATE CatalogCursor
FETCH NEXT FROM DatabaseCursor INTO @Database
END
CLOSE DatabaseCursor
DEALLOCATE DatabaseCursor
END
Herkesin imleç gerektirmeyen bir yöntemi var mı?