यहाँ एक स्क्रिप्ट है, जिसे मैंने MSSQL2008 के लिए किसी भी तालिका के पुनर्निर्माण और पूर्ण अनुक्रमित करने के लिए कर्सर का उपयोग करके बनाया है। यह MSSQL 2000 सर्वर से माइग्रेट किए गए डेटाबेस के साथ उत्पादन वातावरण में काम कर रहा है। मैंने परिवर्तन ट्रैकिंग बंद कर दी है और इस संग्रहीत कार्यविधि को SQL सर्वर एजेंट के माध्यम से चला रहा हूँ। यदि आप एक्सप्रेस का उपयोग कर रहे थे, तो आप इसे टास्क शेड्यूलर के माध्यम से चलाने के लिए एक वीबीएस स्क्रिप्ट का उपयोग कर सकते हैं।
इंडेक्स को आबाद करने की कोशिश करने से पहले हर कैटलॉग पर पहले पुनर्निर्माण करना स्क्रिप्ट में महत्वपूर्ण था।
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
क्या किसी के पास कोई ऐसा तरीका है जिसे शाप देने वालों की आवश्यकता न हो?