Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/08/2011, 17h47   #1
Futur Membre du Club
 
Homme
Inscription : juillet 2002
Messages : 67
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juillet 2002
Messages : 67
Points : 19
Points : 19
Envoyer un message via AIM à gillou13
Par défaut Fonction avec SQL 'dynamique'

Bonjour à tous,

Je ne suis pas habitué au T-SQL, mais j'essai de réaliser la fonction suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
CREATE FUNCTION ConcatColV2 
(@id VARCHAR(MAX), @idCol VARCHAR(MAX), @toto VARCHAR(MAX), @ResultCol VARCHAR(MAX))
 
RETURNS VARCHAR(MAX)
AS
BEGIN
	-- Declare the return variable here
 
	DECLARE 
		@SQL VARCHAR(MAX),
		@tmp VARCHAR(MAX),
		@Result VARCHAR(MAX)
	DECLARE
		myCursor CURSOR
		FOR
 
			SELECT @ResultCol
			FROM @toto
			WHERE @idCol = ' = ''' + @id + ''''
 
	-- ouverture du curseur
	OPEN mycusor
 
	-- lecture de la première ligne
	FETCH myCursor INTO @tmp
	SET @Result = @tmp
 
	-- boucle ligne à ligne
	WHILE @@FETCH_STATUS = 0
	BEGIN
	   FETCH myCursor INTO @tmp
	   SET @Result = @Result + ', ' + @tmp
	END
 
	-- fermeture et désallocation d'espace mémoire du curseur
	CLOSE myCursor
	DEALLOCATE myCursor
 
	-- Return the result of the function
	RETURN @Result
 
END
Elle doit permettre de 'concaténer' une colonne de résultat dans un VARCHAR.

Seulement voila quand je l’exécute j’obtiens le message d'erreur suivant :
"Msg 1087, Level 16, State 1, Procedure ConcatResult, Line 23
Must declare the table variable "@toto"."

Quelqu'un pourrai m'expliquer mon problème svp?

Merci d'avance
gillou13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 19h37   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
SELECT @ResultCol
FROM @toto
WHERE @idCol = ' = ''' + @id + ''''

Vous vous servez d'une variable de type VARCHAR comme d'une table! c'est evidemment impossible!

Cherchez un peu sur le forum, plusieurs topics ont déjà été ouvert par le passé pour la même problématique
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 19h40   #3
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Votre code n'a de plus rien de dynamique...

Essayez plutôt quelque chose de simple comme celà:
Code :
1
2
3
4
5
6
7
 
DECLARE @RESULT VARCHAR(MAX)
SET @RESULT=''
SELECT @RESULT=@RESULT+','+COALESCE(COLONNE1,'')
FROM dbo.MATABLE
 
PRINT @RESULT
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 10h08   #4
Futur Membre du Club
 
Homme
Inscription : juillet 2002
Messages : 67
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juillet 2002
Messages : 67
Points : 19
Points : 19
Envoyer un message via AIM à gillou13
Merci pour les infos iberserk.

Je n'ai pas l'abitude de travailler avec SQL server (+ avec PL/SQL)

j'essai actuellement de travailler avec exec('...').

plus simple à construire, par contre je n'arrive pas récupérer le résultat de la requette. comme avec FETCH dans mon exemple pour 'construire' mon VARCHAR de sortie.
gillou13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h46.


 
 
 
 
Partenaires

Hébergement Web