Ajouter/Remplacer les noms des colones : Titre Corps
declare @IsFullText as bit
declare @Catalogue as nvarchar(250)
declare @Table as nvarchar(250)
declare @Base as nvarchar(250)
declare @PrimaryKey as nvarchar(250)
declare @CataloguePath as nvarchar(250)
declare @ExistCatalogue as bit
VARIABLES A MODIFIER
set @Catalogue = 'VueFiches' Le catalogue comporte le même nom que la table.
set @Table = 'VueFiches' par défaut @Catalogue
set @Base = 'Assistance' Base
set @PrimaryKey = 'PK_Fiches' Clé primaire
set @CataloguePath = 'E:\fulltext\'
use Assistance
SUPPRESSION DU CATALOGUE SI EXISTANT
BEGIN TRY
exec sp_help_fulltext_catalogs @Catalogue;
exec sp_fulltext_table @Table, 'drop'
select 'Catalogue table supprimé'
END TRY
BEGIN CATCH
SELECT 'Catalogue/Table non déjà existant'
END CATCH
BEGIN TRY
exec sp_fulltext_catalog @Catalogue, 'drop'
select 'Catalogue supprimé'
END TRY
BEGIN CATCH
SELECT 'Catalogue non déjà existant'
END CATCH
BACKUP POUR CONSERVER LA COHERENCE DES BASES/BACKUPS
BACKUP LOG assistance TO
DISK = N'L:\BACKUP\LOG\assistance_LOG.bak' WITH NOFORMAT, NOINIT,
NAME = N'assistance-Transaction Log Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
TEST DU FONCTIONNEMENT DU SERVICE
Select @IsFullText = databaseproperty(@Base ,'IsFulltextEnabled');
if (@IsFullText = 0)
BEGIN
Activation du full-text
select 'Activiation du full text'
exec sp_fulltext_database 'enable'
END
Select 'Création du catalogue et ajout des colonnes indexées'
Création d'un catalogue full-text en spécifiant le chemin
exec sp_fulltext_catalog @Catalogue, 'create', @CataloguePath
Select 'Ajout de la table à indexer'
ajout d'une table à la liste des tables indexées pour le full-text
exec sp_fulltext_table @tabname=@Table, @action='create', @ftcat=@Catalogue , @keyname=@PrimaryKey
Select 'Ajout des colonnes'
Ajout d'une colonne à la liste des colonnes indexées pour le full-text
exec sp_fulltext_column @tabname = @Table, @colname ='Titre', @action='add', @language=0x040c
exec sp_fulltext_column @tabname = @Table, @colname ='Accroche', @action='add', @language=0x040c
BACKUP POUR CONSERVER LA COHERENCE DES BASES/BACKUPS
BACKUP LOG assistance TO
DISK = N'L:\BACKUP\LOG\assistance_LOG.bak' WITH NOFORMAT, NOINIT,
NAME = N'assistance-Transaction Log Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
Activate the full-text index
EXEC sp_fulltext_table @Table,'activate';
/* DEBUG
Creation du catalogue ( cad on démare le remplisage !)
exec Sp_fullText_Table @Catalogue, 'Start_change_tracking'
Popolation en diferentielle automatique (Quand le server est en idle )
exec Sp_fullText_Table @Catalogue, 'Start_background_updateindex'
Population manuelle du catalogue, remplace un sheduling
select 'Population manuelle intégration du catalogue'
exec sp_fulltext_catalog @Catalogue, 'start_full'
Attente de population du catalogue
WHILE(SELECT FullTextCatalogProperty(@Catalogue,'populatestatus')) <> 0
BEGIN
WAITFOR DELAY '00:00:02'
CONTINUE
END
Select 'Catalogue rempli'
Verification du catalogue
select RANK,A.* from GLOSSAIRE as A,FREETEXTTABLE(GLOSSAIRE,*,'modem') where A.ID=KEY order by RANK desc
/*
XML_Assistance_FullTextSearch 'Modem'
/* CONTOURNEMENT ERREUR SQL 2005
CAS 1
select 30 FicheID
from Fiches as article JOIN freetexttable (Fiches , * , 'Modem')
AS ct on article.FicheID = ct.KEY
CAS 2
Sp_fullText_Table 'Fiches', 'Update_index'
select Rank from FREETEXTTABLE(Fiches,*,'modem')
CAS 3
SELECT Fiches.FicheID FROM Fiches WHERE CONTAINS (*, '"Modem"')
AIDE
Vérification d'indexation
sp_help_fulltext_columns 'Fiches'
Modifier Liste des commandes full text search
Vérification préalable : le full-text est il activé ?
select databaseproperty('nomdelabase' ,'IsFulltextEnabled');
Activation du full-text
use nomdelabase
exec sp_fulltext_database 'enable'
Création d'un catalogue full-text
exec sp_fulltext_catalog 'nomducatalogueacreer', 'create'
Création d'un catalogue full-text en spécifiant le chemin
exec sp_fulltext_catalog 'nomducatalogueacreer', 'create', 'disque:\répertoire'
Ajout d'une table à la liste des tables indexées pour le full-text
exec sp_fulltext_table 'table', 'create', 'nomducataloguefulltext', 'nomcléprimaire'
Ajout d'une colonne à la liste des colonnes indexées pour le full-text
exec sp_fulltext_column 'table', 'colonne', 'add', 0x040c
Indexation d'un catalogue
exec sp_fulltext_catalog 'nomducatalogue', 'start_full'
Vérifier qu'une colonne soit indexéeSELECT ColumnProperty ( ObjectId('titles'),'titles','IsFulltextIndexed' )
Liste des colonnes indexée d'une tablesp_help_fulltext_columns 'Article'Pour ajouter/supprimer une colonne à un index il faut d'abord desactiver celui-cisp_fulltext_table 'Articles', 'deactivate'puissp_fulltext_column 'Articles', 'type', 'drop'sp_fulltext_column 'Articles', 'title', 'add'et on reactivesp_fulltext_table 'Articles', 'activate'
IMPORTANT : Je conseille de mettre tous les calagos en mode tracking, cela signifie que le catalogue se reconstitue lorsque le serveur a 100ms de dispo.Rappel pour celaSp_fullText_Table 'Articles', 'Start_change_tracking'Sp_fullText_Table 'Articles', 'Start_background_updateindex'
______
AUTRE
Emplacement des fichiers
L'indexation full-text portant sur des tables comportant moins d'un million de lignes ne nécessite aucune optimisation ou presque. Si le nombre de lignes est supérieur au million, il est nécessaire configurer Sql Server afin de favoriser les performances entrée/sortie vers les fichiers utilisés. Comme souvent, il est préférable de mettre les fichiers sur un disque physique distinct de celui utilisé par Sql Server lui-même.
Sous Windows 2000, le pagefile.sys doit être 1,5 à 2 fois plus grand que la taille de la mémoire. De nouveau, ce fichier doit se trouver sur un autre disque que ceux utilisés par Sql Server, l'environnement hôte et le catalogue si cela est possible
Modifier update des catalogue
Sp_fullText_Table 'ActuNews', 'Start_change_tracking'
Sp_fullText_Table 'ActuNews', 'Start_background_updateindex'
Permet d'avoir une maj dès que le serveur à 100ms de disponibilité.
Evite aussi d'inclure un timestamp dans la table
ModifierSQL 2000 : Analyse et optimisation
utilitaire permettant l'analyse des base et service sous SQL 2000 pour l'optimisation des bases
http://www.microsoft.com/downloads/details.aspx?familyid=B352EB1F-D3CA-44EE-893E-9E07339C1F22&displaylang=en
Modifier XML : Sauvegarde de données OPEN XML
Exemple simple
USE NorthWind
CREATE PROC GetRegions_XML
@empdata text
AS
DECLARE @hDoc int
DECLARE @tbl TABLE(state VARCHAR(20))
exec sp_xml_preparedocument @hDoc OUTPUT, @empdata
INSERT @tbl
SELECT StateName
FROM OPENXML(@hDoc, 'root/States')
WITH (StateName VARCHAR(20))
EXEC sp_xml_removedocument @hDoc
SELECT * FROM Suppliers
WHERE Region IN (SELECT * FROM @tbl)
/*
declare @s varchar(100)
set @s = '
'
exec GetRegions_XML @s
_______
Avec Curseur
Transact SQL Cursor
CREATE PROC SQL_Cursor
AS
/*Local variables */
DECLARE @ContName VARCHAR(100),
@CompName VARCHAR(50)
/*create the cursor*/
DECLARE MyCursor CURSOR FOR
SELECT CompanyName, ContactName
FROM Suppliers
WHERE ContactName LIKE 'c%'
/*open the cursor*/
OPEN MyCursor
/*get row values*/
FETCH MyCursor INTO @CompName, @ContName
/*perform oterations with single row*/
PRINT 'T_SQL cursor row | ' + @ContName + ' | ' + @CompName
/*establish loop structure*/
WHILE FETCH_STATUS = 0{BR}
BEGIN{BR}
/*get row values*/{BR}
FETCH MyCursor INTO @CompName, @ContName{BR}
/*perform operations with single row*/{BR}
PRINT 'T_SQL cursor row | ' + @ContName + ' | ' + @CompName{BR}
END{BR}
/*close the cursor*/{BR}
CLOSE MyCursor{BR}
/*remove the cursor definition*/{BR}
DEALLOCATE MyCursor{BR}
{BR}
-- Cursor Simulator{BR}
CREATE PROC CursorSimulator{BR}
AS{BR}
/*Prepare TABLE variable to take resultset*/{BR}
DECLARE @tbl TABLE({BR}
RowID INT IDENTITY(1, 1),{BR}
CompanyName VARCHAR(100),{BR}
ContactName VARCHAR(50)){BR}
/*Local variables */{BR}
DECLARE @ContName VARCHAR(100),{BR}
@CompName VARCHAR(50),{BR}
@count int, /*create local fetch_status*/
@iRow int /*row pointer (index)*/
/* create array simulator */
INSERT @tbl
SELECT CompanyName, ContactName
FROM Suppliers
WHERE ContactName LIKE 'c%'
/*get array Upper Bound (highest ID number)*/
SET @count = @@ROWCOUNT
/*initialize index counter*/
SET @iRow = 1
/*establish loop structure*/
WHILE @iRow <= @count
BEGIN
/*get row values*/
SELECT @ContName = CompanyName, @CompName = ContactName
FROM @tbl
WHERE RowID = @iRow
/*perform operations with single row*/
PRINT 'My cursor row | ' + @ContName + ' | ' + @CompName
/*go to next row*/
SET @iRow = @iRow + 1
END
Modifier Changer le propriétaire d'un objet en base
Executer la commande suivante :
EXEC sp_changeobjectowner 'NOM_DE_LA_TABLE', 'OWNER'
Pour plus de renseignements:
http://doc.ddart.net/mssql/sql70/sp_ca-cz_17.htm
MAJ
Commande générique pour tous les objets!! Beaucoup plus praqtique :
SELECT 'EXEC(