Bonjour,

Je suis débutant en SQL et je travaille sur une fonction qui recherche une chaîne de caractères dans toutes les tables d'une base.
Bon c'est peut-être fou mais osef, c'est pour le fun et pour apprendre


J'ai donc préalablement codé une fonction qui répertorie les noms de toutes les colonnes de toutes les tables de ma base.

Jusque là, pas de problème.

J'ai enregistré ça dans une table dbo._TABLE_COLUMNS et voici à quoi elle ressemble :

ID | Nom_table_1 | Nom_table_2 | Nom_table_3 | ...
1 | Nom_Colonne_1 | Nom_Colonne_1 | Nom_Colonne_1 | ...
2 | Nom_Colonne_2 | Nom_Colonne_2 | Nom_Colonne_2 | ...
3 | Nom_Colonne_3 | Nom_Colonne_3 | Nom_Colonne_3 | ...
4 | Nom_Colonne_4 | Nom_Colonne_4 | Nom_Colonne_4 | ...
5 | Nom_Colonne_5 | Nom_Colonne_5 | Nom_Colonne_5 | ...



J'ai également une 2e table dbo._Table_List qui ressemble à ça :

Table_ID | Table_Name
1 | Nom_table_1
2 | Nom_table_2
3 | Nom_table_3
4 | Nom_table_4
5 | Nom_table_5



Maintenant j'aimerai faire la fonction recherche et afficher le résultat sous forme :

PRINT '"'+@Search+'" trouvé dans la table "'+@Table+'" à la colonne "'+@Colonne+'".'

Pour arriver à mon résultat, je dois d'abord définir @base et @colonne qui seront incrémentées en fonction de l'ID des 2 tables.


Problème, je n'arrive pas à définir une variable en fonction d'un SELECT @variable FROM.


Je m'explique.

Pour pouvoir faire la fonction recherche, je dois définir @base et @colonne.


Voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
USE NomDeMaBase
GO
DECLARE @Search varchar(512) , @Table varchar(512) , @Colonne varchar(128) , @Table_ID varchar(512) ,  @Colonne_ID varchar(512)
 
/*ENTRER ICI LA CHAINE DE CARACTERES RECHERCHEE*/
SET @Search = 'chaine de caractères'
 
SET @Table_ID = 1
SET @Colonne_ID = 1
 
 
 
                /*Ici je récupère bien le nom de la 1e table à "scanner".
                  On va dire par exemple que @table contient "Nom_table_1" */
 
		SET @Table = (SELECT Table_Name FROM dbo._Table_List WHERE Table_ID = @Table_ID)
 
 
 
		/*La ligne qui me pose problème : apparemment c'est le SELECT @Table qui ne passe pas*/
 
		SET @Colonne = (SELECT @Table FROM dbo._TABLE_COLUMNS WHERE ID = ''+@Colonne_ID+'')
Je n'ai pas la bonne valeur qui sort de mon @Colonne car il devient égal à @Table_Short :/

J'ai essayé plusieurs méthodes comme par exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
SET @Col_Request = N'SET @Colonne = (SELECT '+@Table_Short+' From dbo._TABLE_COLUMNS WHERE ID = '+''''+@Colonne_ID+''''+')'
PRINT @Col_Request
EXEC sp_executesql @Col_Request
PRINT @Colonne
Là il me dit carrément que @Colonne n'est pas défini : Must declare the scalar variable "@Colonne".


Je sèche

Quelqu'un à une idée ?

Merci