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_RptRetailSaleSCumulQte','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
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_RptRetailSaleSCumulQte','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
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_RptRetailSaleSCumulQte','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
J'ai oublié de spécifié que j'utilise SQL Server 2005 STD ENG SP2
Merci.
Julien
"Julien Bonnier" wrote in message
news: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_RptRetailSaleSCumulQte','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
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_RptRetailSaleSCumulQte','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
J'ai oublié de spécifié que j'utilise SQL Server 2005 STD ENG SP2
Merci.
Julien
"Julien Bonnier" wrote in message
news: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_RptRetailSaleSCumulQte','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
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" wrote in message
news:J'ai oublié de spécifié que j'utilise SQL Server 2005 STD ENG SP2
Merci.
Julien
"Julien Bonnier" wrote in message
news: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_RptRetailSaleSCumulQte','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
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_RptRetailSaleSCumulQte','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
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" wrote in message
news:J'ai oublié de spécifié que j'utilise SQL Server 2005 STD ENG SP2
Merci.
Julien
"Julien Bonnier" wrote in message
news: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_RptRetailSaleSCumulQte','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
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_RptRetailSaleSCumulQte','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
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_RptRetailSaleSCumulQte','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
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_RptRetailSaleSCumulQte','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
Salut Julien
toujours aussi tarabiscotée tes demandes :-)
voici une requete qui te permet de retrouver toutes les colonnes de
toutes tes tables
SELECT table_name,COLUMN_NAME, DATA_TYpe From INFORMATION_SCHEMA.COlumns
WHERE Table_name in (Select name from sysobjects where xtype = 'U' and
status > 0)
pire voici un bout de requete
récupérant toutes les colonnes de type entier de ma table et les affiches
DECLARE @SQL VarChar(6000),
@LaColonne VarChar(128),
@LaTable
SET @LaTable = 'matableamoi'
SET @SQL = ''
DECLARE CurTables CURSOR
FOR
SELECT TABLE_Name + '.' + COLUMN_Name
FROM INFORMATION_SCHEMA.COlumns
WHERE TABLE_Name = @LaTable AND DATA_Type = 'int'
OPEN CurTables
FETCH Curtables INTO @Lacolonne
WHILE @@Fetch_Status = 0
BEGIN
SET @SQL = @SQL + @Lacolonne + ','
FETCH Curtables INTO @Lacolonne
END
CLOSE CurTables
DEALLOCATE CurTables
SET @SQL = 'SELECT ' + @SQL + ' 1 FROM ' + @LaTable
EXEC(@SQL)
tu trouvera surement ton bonheur dans tous ca :-)
Gilles
Julien Bonnier a écrit :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_RptRetailSaleSCumulQte','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
Salut Julien
toujours aussi tarabiscotée tes demandes :-)
voici une requete qui te permet de retrouver toutes les colonnes de
toutes tes tables
SELECT table_name,COLUMN_NAME, DATA_TYpe From INFORMATION_SCHEMA.COlumns
WHERE Table_name in (Select name from sysobjects where xtype = 'U' and
status > 0)
pire voici un bout de requete
récupérant toutes les colonnes de type entier de ma table et les affiches
DECLARE @SQL VarChar(6000),
@LaColonne VarChar(128),
@LaTable
SET @LaTable = 'matableamoi'
SET @SQL = ''
DECLARE CurTables CURSOR
FOR
SELECT TABLE_Name + '.' + COLUMN_Name
FROM INFORMATION_SCHEMA.COlumns
WHERE TABLE_Name = @LaTable AND DATA_Type = 'int'
OPEN CurTables
FETCH Curtables INTO @Lacolonne
WHILE @@Fetch_Status = 0
BEGIN
SET @SQL = @SQL + @Lacolonne + ','
FETCH Curtables INTO @Lacolonne
END
CLOSE CurTables
DEALLOCATE CurTables
SET @SQL = 'SELECT ' + @SQL + ' 1 FROM ' + @LaTable
EXEC(@SQL)
tu trouvera surement ton bonheur dans tous ca :-)
Gilles
Julien Bonnier a écrit :
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_RptRetailSaleSCumulQte','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
Salut Julien
toujours aussi tarabiscotée tes demandes :-)
voici une requete qui te permet de retrouver toutes les colonnes de
toutes tes tables
SELECT table_name,COLUMN_NAME, DATA_TYpe From INFORMATION_SCHEMA.COlumns
WHERE Table_name in (Select name from sysobjects where xtype = 'U' and
status > 0)
pire voici un bout de requete
récupérant toutes les colonnes de type entier de ma table et les affiches
DECLARE @SQL VarChar(6000),
@LaColonne VarChar(128),
@LaTable
SET @LaTable = 'matableamoi'
SET @SQL = ''
DECLARE CurTables CURSOR
FOR
SELECT TABLE_Name + '.' + COLUMN_Name
FROM INFORMATION_SCHEMA.COlumns
WHERE TABLE_Name = @LaTable AND DATA_Type = 'int'
OPEN CurTables
FETCH Curtables INTO @Lacolonne
WHILE @@Fetch_Status = 0
BEGIN
SET @SQL = @SQL + @Lacolonne + ','
FETCH Curtables INTO @Lacolonne
END
CLOSE CurTables
DEALLOCATE CurTables
SET @SQL = 'SELECT ' + @SQL + ' 1 FROM ' + @LaTable
EXEC(@SQL)
tu trouvera surement ton bonheur dans tous ca :-)
Gilles
Julien Bonnier a écrit :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_RptRetailSaleSCumulQte','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