Afficher un message
Vieux 20/07/2007, 14h14   #4
Julien Bonnier
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Contruire une list de champs dynamiquement.

J'ai réussi à faire ce que je voulais en utilisant un EXEC

Merci

Julien

"Julien Bonnier" <julien@m0851.com> wrote in message
news:uFpp8thyHHA.3696@TK2MSFTNGP03.phx.gbl...
> Bon j'ai reussi a le faire en ajoutant un SET @fld_list = '' avant ma
> boucle WHILE.
>
> Mais nouveau probleme, quand je remplace les nombres apres mes TOP
> (TOP1,TOP10) par mes parametre @loop et @i, SQL me retourne les erreur
> suivantes :
>
> Msg 102, Level 15, State 1, Procedure sp_RptRetailSalesCumul, Line 62
>
> Incorrect syntax near '@loop'.
>
> Msg 102, Level 15, State 1, Procedure sp_RptRetailSalesCumul, Line 63
>
> Incorrect syntax near '@i'.
>
>
>
> Quelqu'un la cause de ces erreur ?
>
>
> "Julien Bonnier" <julien@m0851.com> wrote in message
> news:e5WquDhyHHA.1188@TK2MSFTNGP04.phx.gbl...
>> J'ai oublié de spécifié que j'utilise SQL Server 2005 STD ENG SP2
>>
>> Merci.
>>
>> Julien
>>
>> "Julien Bonnier" <julien@m0851.com> wrote in message
>> news:eqRVcBhyHHA.4184@TK2MSFTNGP06.phx.gbl...
>>> Bonjours à tous,
>>>
>>> J'ai un petit problèmes ici .
>>>
>>> Je tente de programmer une requete asser complexe.
>>>
>>> Jai 4 tables et je desire contrurire une procédure stockée qui va
>>> chercher des donné dans les 4 table mais la n'est pas le hic.
>>>
>>> Voici un exemple:
>>> table1
>>> - 3 colonne (fix)
>>> table 2
>>> nb de colonne variable
>>> table 3
>>> nb de colonne variable
>>> table 4
>>> nb de colonne variable
>>>
>>> La requete que je desire faire ressemblerais a peu pres à ca:
>>> SELECT t1.*, t2.col1, t3.col1, t4.col1, t2.col2, t3.col2, t4.col2,
>>> t2.col3 [...] FROM table1 AS t1 LEFT JOIN [...]
>>>
>>> Mais je dois en venir a prendre toute les colonnes des table 2,3,4
>>>
>>> Donc je me suis dit que je devais construire un liste de champs à aller
>>> chercher dans les tables désirer et les stockés dans un paramètre en
>>> varchar(1000).
>>>
>>> J'ai donc lu beaucoup et jai trouver la commande WHILE dans le online
>>> book de SQL SERVER. Et j'ai ajouté à ma SP une morceau de code qui est
>>> le suivant:
>>> ------------------------------------------------------------------------------------------------------------------------------------------------------
>>> DECLARE @fld_list varchar(8000), @loop int, @i int
>>>
>>> [...]
>>>
>>> SET @i=(SELECT COUNT(*)
>>>
>>> FROM information_schema.columns
>>>
>>> WHERE TABLE_NAME IN ('ut_RptRetailSaleSCumulQte',
>>> 'ut_RptRetailSaleSCumulProfit', 'ut_RptRetailSaleSCumulSales')
>>>
>>> AND COLUMN_NAME<>'Style')
>>>
>>> SET @loop = 1
>>>
>>> print (CONVERT(varchar(5), @loop) + ' _ ' + CONVERT(varchar(5), @i))
>>>
>>> WHILE (@loop <= @i)
>>>
>>> BEGIN
>>>
>>> SET @fld_list ='' + @fld_list + (SELECT TOP 1 F FROM (
>>>
>>> SELECT TOP 10
>>> REPLACE(REPLACE(REPLACE(TABLE_NAME,'ut_RptRetailSa leSCumulQte','Q'),'ut_RptRetailSaleSCumulProfit',' P'),'ut_RptRetailSaleSCumulSales','SL')
>>> + '.' + COLUMN_NAME + ',' AS F
>>>
>>> FROM information_schema.columns
>>>
>>> WHERE TABLE_NAME IN ('ut_RptRetailSaleSCumulQte',
>>> 'ut_RptRetailSaleSCumulProfit', 'ut_RptRetailSaleSCumulSales')
>>>
>>> AND COLUMN_NAME<>'Style'
>>>
>>> ORDER BY F ASC
>>>
>>> ) AS t2 ORDER BY F ASC)
>>>
>>> SET @loop = @loop + 1
>>>
>>> print (CONVERT(varchar(5), @loop) + ' _ ' + CONVERT(varchar(5), @i))
>>>
>>> print(@fld_list)
>>>
>>> END
>>>
>>> print('g' + @fld_list)
>>>
>>> [...]
>>>
>>> ------------------------------------------------------------------------------------------------------------------------------------------------------
>>>
>>> Ne tennez pas compte des top X qui ne sont pas encore setter comme il
>>> faut.
>>>
>>> Mon probleme c'est que quand ma boucle (WHILE) est terminée et qu'elle
>>> atteint la ligne qui dit END ma procédure stockée arrete de s'exécuté.
>>> Je n'atteint donc jamais la ligne:
>>>
>>> print('g' + @fld_list)
>>>
>>> Et aussi mon autre probleme c'est que print(@fld_list) retourne toujours
>>> une chaine avec un espace seulement.
>>>
>>> Cepandant ce second probleme est peut-etre du a mes TOP qui ne sont pas
>>> setter mais je ne crois pas car si j'exécute la requete SELECT j'obtient
>>>
>>> P.LAM2PROFIT,
>>>
>>>
>>>
>>> Est-ce que quelqu'un sait comment utilisé une boucle (WHILE) à
>>> l'intérieur d'une proc stockée ?
>>>
>>> Ou est-ce que quelqu'un a une alternative à ma solution (qui ne
>>> fonctionne pas pour l'instant)?
>>>
>>>
>>>
>>> Merci en avance!
>>>
>>>
>>>
>>> Julien
>>>
>>>

>>
>>

>
>



  Réponse avec citation
 
Page generated in 0,07321 seconds with 9 queries