Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred BROUARD
/*--------------------------------------------------- | recherche d'une occurrence de mot dans n'importe | | quelle colonne de type caractères de n'importe | | quelle table de la base de données | |----------------------------------------------------- | | Frédéric BROUARD - DATA SAPIENS - 2001-12-18 | -------------------------------------------------- */
CREATE PROCEDURE SP_SEARCH_STRING_ANYFIELD_ANYTABLE @SearchWord Varchar(32) -- mot recherché AS
DECLARE @ErrMsg VARCHAR(128)
-- effet de bord 1 : pas de mot passé IF @SearchWord IS NULL BEGIN SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument NULL' GOTO LBL_ERROR END
-- effet de bord 2 : mot vide passé IF @SearchWord = '' BEGIN SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument vide' GOTO LBL_ERROR END
-- effet de bord 3 : mot contenant un caractère joker % du LIKE IF CHARINDEX('%', @SearchWord) > 0 BEGIN SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument contenant un caractère %' GOTO LBL_ERROR END
-- effet de bord 4 : mot contenant un caractère joker _ du LIKE IF CHARINDEX('_', @SearchWord) > 0 BEGIN SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument contenant un caractère _' GOTO LBL_ERROR END
-- variables de travail DECLARE @TableName VARCHAR(128), -- nom de la table passé en argument @ColumnList1 VARCHAR(2000),-- liste des colonnes pour clause SELECT @ColumnList2 VARCHAR(2000),-- liste des colonnes pour clause WHERE @SQL VARCHAR(5000) -- requête dynamique
-- curseur parcourant toutes les tables DECLARE CurTables CURSOR FOR SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.tables WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME IS NOT NULL -- en cas d'erreur IF @@Error <> 0 BEGIN SET @ErrMsg = 'Erreur dans la recherche de la lsite des tables concernées' GOTO LBL_ERROR END
-- ouverture du cuseur OPEN CurTables
-- lecture de la première ligne de l'ensemble de résultat FETCH CurTables INTO @TableName
-- la lecture est-elle correcte ? Oui, on boucle ! WHILE @@Fetch_Status = 0 BEGIN
-- les variables contenant les listes des colonnes sont initialisée à vide SET @ColumnList1 = '' SET @ColumnList2 = ''
-- construction des listes SELECT @ColumnList1 = @ColumnList1 + COLUMN_NAME+', ', @ColumnList2 = @ColumnList2 + 'COALESCE('+COLUMN_NAME+', '''') + ' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tableName AND DATA_TYPE LIKE '%char%'
-- pas de colonnes cible pour la recherche, on lit l'enregistrement suivant et on boucle IF @ColumnList1 = '' BEGIN FETCH CurTables INTO @TableName CONTINUE END
-- suppression du dernier caractère parasite des listes de colonne SET @ColumnList1 = SUBSTRING(@ColumnList1, 1, LEN(@ColumnList1) - 1) SET @ColumnList2 = SUBSTRING(@ColumnList2, 1, LEN(@ColumnList2) - 1)
-- création de la requête de recherche de l'ensemble des occurences SET @SQL = 'SELECT ' +@ColumnList1 +' FROM ' +@TableName +' WHERE ' +@ColumnList2 +' LIKE ''%'+@SearchWord+'%'''
-- exécution de la requête de recherche des occurences EXEC(@SQL)
-- lecture de la ligne suivante FETCH CurTables INTO @TableName END
-- fermeture du curseur CLOSE CurTables
-- libération de l'espace mémoire DEALLOCATE CurTables
PRINT '*** RECHERCHE de l''occurence '+@SearchWord+ ' dans toute la base terminée ***'
RETURN
-- gestion des erreurs LBL_ERROR: RAISERROR (@ErrMsg, 16, 1)
GO
pascal a écrit:
Bonjour, Est ce possible de recherche un texte dans toute la base de donnée. Merci.
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
/*---------------------------------------------------
| recherche d'une occurrence de mot dans n'importe |
| quelle colonne de type caractères de n'importe |
| quelle table de la base de données |
|----------------------------------------------------- |
| Frédéric BROUARD - DATA SAPIENS - 2001-12-18 |
-------------------------------------------------- */
CREATE PROCEDURE SP_SEARCH_STRING_ANYFIELD_ANYTABLE
@SearchWord Varchar(32) -- mot recherché
AS
DECLARE @ErrMsg VARCHAR(128)
-- effet de bord 1 : pas de mot passé
IF @SearchWord IS NULL
BEGIN
SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument NULL'
GOTO LBL_ERROR
END
-- effet de bord 2 : mot vide passé
IF @SearchWord = ''
BEGIN
SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument vide'
GOTO LBL_ERROR
END
-- effet de bord 3 : mot contenant un caractère joker % du LIKE
IF CHARINDEX('%', @SearchWord) > 0
BEGIN
SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument
contenant un caractère %'
GOTO LBL_ERROR
END
-- effet de bord 4 : mot contenant un caractère joker _ du LIKE
IF CHARINDEX('_', @SearchWord) > 0
BEGIN
SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument
contenant un caractère _'
GOTO LBL_ERROR
END
-- variables de travail
DECLARE @TableName VARCHAR(128), -- nom de la table passé en argument
@ColumnList1 VARCHAR(2000),-- liste des colonnes pour clause SELECT
@ColumnList2 VARCHAR(2000),-- liste des colonnes pour clause WHERE
@SQL VARCHAR(5000) -- requête dynamique
-- curseur parcourant toutes les tables
DECLARE CurTables CURSOR
FOR
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.tables
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_NAME IS NOT NULL
-- en cas d'erreur
IF @@Error <> 0
BEGIN
SET @ErrMsg = 'Erreur dans la recherche de la lsite des tables concernées'
GOTO LBL_ERROR
END
-- ouverture du cuseur
OPEN CurTables
-- lecture de la première ligne de l'ensemble de résultat
FETCH CurTables INTO @TableName
-- la lecture est-elle correcte ? Oui, on boucle !
WHILE @@Fetch_Status = 0
BEGIN
-- les variables contenant les listes des colonnes sont initialisée à vide
SET @ColumnList1 = ''
SET @ColumnList2 = ''
-- construction des listes
SELECT @ColumnList1 = @ColumnList1 + COLUMN_NAME+', ',
@ColumnList2 = @ColumnList2 + 'COALESCE('+COLUMN_NAME+', '''') + '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tableName
AND DATA_TYPE LIKE '%char%'
-- pas de colonnes cible pour la recherche, on lit l'enregistrement suivant et
on boucle
IF @ColumnList1 = ''
BEGIN
FETCH CurTables INTO @TableName
CONTINUE
END
-- suppression du dernier caractère parasite des listes de colonne
SET @ColumnList1 = SUBSTRING(@ColumnList1, 1, LEN(@ColumnList1) - 1)
SET @ColumnList2 = SUBSTRING(@ColumnList2, 1, LEN(@ColumnList2) - 1)
-- création de la requête de recherche de l'ensemble des occurences
SET @SQL = 'SELECT ' +@ColumnList1
+' FROM ' +@TableName
+' WHERE ' +@ColumnList2
+' LIKE ''%'+@SearchWord+'%'''
-- exécution de la requête de recherche des occurences
EXEC(@SQL)
-- lecture de la ligne suivante
FETCH CurTables INTO @TableName
END
-- fermeture du curseur
CLOSE CurTables
-- libération de l'espace mémoire
DEALLOCATE CurTables
PRINT '*** RECHERCHE de l''occurence '+@SearchWord+ ' dans toute la base
terminée ***'
RETURN
-- gestion des erreurs
LBL_ERROR:
RAISERROR (@ErrMsg, 16, 1)
GO
pascal a écrit:
Bonjour,
Est ce possible de recherche un texte dans toute la base de donnée.
Merci.
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
/*--------------------------------------------------- | recherche d'une occurrence de mot dans n'importe | | quelle colonne de type caractères de n'importe | | quelle table de la base de données | |----------------------------------------------------- | | Frédéric BROUARD - DATA SAPIENS - 2001-12-18 | -------------------------------------------------- */
CREATE PROCEDURE SP_SEARCH_STRING_ANYFIELD_ANYTABLE @SearchWord Varchar(32) -- mot recherché AS
DECLARE @ErrMsg VARCHAR(128)
-- effet de bord 1 : pas de mot passé IF @SearchWord IS NULL BEGIN SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument NULL' GOTO LBL_ERROR END
-- effet de bord 2 : mot vide passé IF @SearchWord = '' BEGIN SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument vide' GOTO LBL_ERROR END
-- effet de bord 3 : mot contenant un caractère joker % du LIKE IF CHARINDEX('%', @SearchWord) > 0 BEGIN SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument contenant un caractère %' GOTO LBL_ERROR END
-- effet de bord 4 : mot contenant un caractère joker _ du LIKE IF CHARINDEX('_', @SearchWord) > 0 BEGIN SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument contenant un caractère _' GOTO LBL_ERROR END
-- variables de travail DECLARE @TableName VARCHAR(128), -- nom de la table passé en argument @ColumnList1 VARCHAR(2000),-- liste des colonnes pour clause SELECT @ColumnList2 VARCHAR(2000),-- liste des colonnes pour clause WHERE @SQL VARCHAR(5000) -- requête dynamique
-- curseur parcourant toutes les tables DECLARE CurTables CURSOR FOR SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.tables WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME IS NOT NULL -- en cas d'erreur IF @@Error <> 0 BEGIN SET @ErrMsg = 'Erreur dans la recherche de la lsite des tables concernées' GOTO LBL_ERROR END
-- ouverture du cuseur OPEN CurTables
-- lecture de la première ligne de l'ensemble de résultat FETCH CurTables INTO @TableName
-- la lecture est-elle correcte ? Oui, on boucle ! WHILE @@Fetch_Status = 0 BEGIN
-- les variables contenant les listes des colonnes sont initialisée à vide SET @ColumnList1 = '' SET @ColumnList2 = ''
-- construction des listes SELECT @ColumnList1 = @ColumnList1 + COLUMN_NAME+', ', @ColumnList2 = @ColumnList2 + 'COALESCE('+COLUMN_NAME+', '''') + ' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tableName AND DATA_TYPE LIKE '%char%'
-- pas de colonnes cible pour la recherche, on lit l'enregistrement suivant et on boucle IF @ColumnList1 = '' BEGIN FETCH CurTables INTO @TableName CONTINUE END
-- suppression du dernier caractère parasite des listes de colonne SET @ColumnList1 = SUBSTRING(@ColumnList1, 1, LEN(@ColumnList1) - 1) SET @ColumnList2 = SUBSTRING(@ColumnList2, 1, LEN(@ColumnList2) - 1)
-- création de la requête de recherche de l'ensemble des occurences SET @SQL = 'SELECT ' +@ColumnList1 +' FROM ' +@TableName +' WHERE ' +@ColumnList2 +' LIKE ''%'+@SearchWord+'%'''
-- exécution de la requête de recherche des occurences EXEC(@SQL)
-- lecture de la ligne suivante FETCH CurTables INTO @TableName END
-- fermeture du curseur CLOSE CurTables
-- libération de l'espace mémoire DEALLOCATE CurTables
PRINT '*** RECHERCHE de l''occurence '+@SearchWord+ ' dans toute la base terminée ***'
RETURN
-- gestion des erreurs LBL_ERROR: RAISERROR (@ErrMsg, 16, 1)
GO
pascal a écrit:
Bonjour, Est ce possible de recherche un texte dans toute la base de donnée. Merci.
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
pascal
Super Et en plus ca marche ! ;) Merci
-- Ceci est une signature automatique de MesNews. Site : http://www.mesnews.net
Super
Et en plus ca marche ! ;)
Merci
--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net