cs_ankou22
Messages postés81Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 7 juin 2012 30 sept. 2007 à 15:24
Bonjour et un grand merci pour cette exemple qui m'a donné un début de solution.
J'ai une table 'Table1' et une table Table2. Table2 contient plusieurs ligne de Message pour un idTable1.
Je souhaite obtenir une concatenation de la colonne Message Groupée par idTable1.
J'ai réussit avec cette requête :
IF OBJECT_ID('MaTableTemp') IS NULL
CREATE TABLE MaTableTemp
(idTb1 varchar(20),message varchar(8000))
DECLARE @idTable1 VARCHAR(50)
DECLARE curseur_idTable1 CURSOR FOR
SELECT distinct idTable1 FROM Table1 where idTable1 <>''
OPEN curseur_idTable1
FETCH curseur_idTable1 INTO @idTable1
WHILE @@FETCH_STATUS = 0
BEGIN
--Concatenation des messages
DECLARE @machaine varchar(200)
SET @machaine = ''
SELECT @machaine = @machaine + message + char(13) FROM Table2 WHERE idTb1=@idTable1
--Insertion d un enregistrement dans ma table
INSERT INTO MaTableTemp(idTb1,message)
SELECT @idTable1,@machaine
--PRINT @idTable1
--PRINT @machaine
FETCH curseur_idTable1 INTO @idTable1
END
CLOSE curseur_idTable1
DEALLOCATE curseur_idTable1
SELECT * FROM MaTableTemp
DROP TABLE MaTableTemp
En résumé :
je créer une table temporaire 'MaTableTemp'
je déclare un curseur curseur_idTable1 qui contient ma requête principale
Je fais une boucle, et pour chaque résultat, j'exécute la concatenation que j'insère dans 'MaTableTemp'
Enfin je fais un select * de ma table 'MaTableTemp'
avant de la supprimer
Si vous avez mieux, je suis preneur
cs_skweeky
Messages postés259Date d'inscriptionmercredi 3 mai 2006StatutMembreDernière intervention11 janvier 20108 14 avril 2007 à 21:13
En fait c'est qu'il n'affiche pas les chaînes au de là d'une certaine longueur (configurable) dans Management Studio çà m'a déjà fait le coup plusieurs fois.
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 avril 20134 29 sept. 2006 à 15:56
hello
J' ai essayer la méthode 1 sous 2005 :
SET @machaine = ''
SELECT @machaine = @machaine + Champ + ',' FROM MaTable
SELECT @machaine
Ca marche trés bien mais ...
Ben aprés N caractéres il n'écrit plus rien dans la chaine pourtant j'ai essayer de convertir tous en nvarchar(Max) mais pas moyen
(je voulais tester pour faire des CSV).
Je vais tenter la méthode avec XMLPath. mais je voudrais bien savoir d'ou viens le problème si tu en as une idée.
30 sept. 2007 à 15:24
J'ai une table 'Table1' et une table Table2. Table2 contient plusieurs ligne de Message pour un idTable1.
Je souhaite obtenir une concatenation de la colonne Message Groupée par idTable1.
J'ai réussit avec cette requête :
IF OBJECT_ID('MaTableTemp') IS NULL
CREATE TABLE MaTableTemp
(idTb1 varchar(20),message varchar(8000))
DECLARE @idTable1 VARCHAR(50)
DECLARE curseur_idTable1 CURSOR FOR
SELECT distinct idTable1 FROM Table1 where idTable1 <>''
OPEN curseur_idTable1
FETCH curseur_idTable1 INTO @idTable1
WHILE @@FETCH_STATUS = 0
BEGIN
--Concatenation des messages
DECLARE @machaine varchar(200)
SET @machaine = ''
SELECT @machaine = @machaine + message + char(13) FROM Table2 WHERE idTb1=@idTable1
--Insertion d un enregistrement dans ma table
INSERT INTO MaTableTemp(idTb1,message)
SELECT @idTable1,@machaine
--PRINT @idTable1
--PRINT @machaine
FETCH curseur_idTable1 INTO @idTable1
END
CLOSE curseur_idTable1
DEALLOCATE curseur_idTable1
SELECT * FROM MaTableTemp
DROP TABLE MaTableTemp
En résumé :
je créer une table temporaire 'MaTableTemp'
je déclare un curseur curseur_idTable1 qui contient ma requête principale
Je fais une boucle, et pour chaque résultat, j'exécute la concatenation que j'insère dans 'MaTableTemp'
Enfin je fais un select * de ma table 'MaTableTemp'
avant de la supprimer
Si vous avez mieux, je suis preneur
14 avril 2007 à 21:13
29 sept. 2006 à 15:56
J' ai essayer la méthode 1 sous 2005 :
SET @machaine = ''
SELECT @machaine = @machaine + Champ + ',' FROM MaTable
SELECT @machaine
Ca marche trés bien mais ...
Ben aprés N caractéres il n'écrit plus rien dans la chaine pourtant j'ai essayer de convertir tous en nvarchar(Max) mais pas moyen
(je voulais tester pour faire des CSV).
Je vais tenter la méthode avec XMLPath. mais je voudrais bien savoir d'ou viens le problème si tu en as une idée.