OVH Cloud OVH Cloud

Procédure stockée et calcul de variables

2 réponses
Avatar
sebcou
Bonjour !

Une procédure stockée reçoit en entrée deux mois et deux années. Il s'agit
d'un intervalle de 12 mois, p.ex 5-2003 à 4-2004.

Je dois ensuite exécuter un insert paramétré à l'aide de ces variables, pour
les 12 mois (désolé le code est assez indigeste) :



EXEC ('INSERT INTO FINANZPLANMONTH (GroupByCat, Bezeichnung, Monat1, Monat2,
Monat3, Monat4, Monat5, Monat6, Monat7, Monat8, Monat9, Monat10, Monat11,
Monat12, Reihenfolge, ID_Statuskosten)
SELECT DISTINCT TOP 100 PERCENT GroupByCat,
dbo.Finanzplan.Bezeichnung,
(SELECT SUM(Betrag)
FROM FINANZPLAN
WHERE MONTH(Falligkeitsdatum) = ' + @m1 + 'AND
YEAR(Falligkeitsdatum) = ' + @y1 + ' AND FINANZPLAN.GroupByNr =
GROUPBYCAT.GroupByCat
GROUP BY FINANZPLAN.GroupByNr) AS Monat1, ...



Les variables @m1et @y1 me posent problème dans le sens où je vais devoir
calculer le changement d'année si le mois est plus grand que 12. Et comme je
suis déjà dans ma requête insert, je ne pense pas pouvoir faire de boucle ou
autre chose du style... Je pourrais calculer pour chaque insertion le mois
et l'année et stocker dans 2 variables, ce qui me ferait 24 variables en
plus, mais je ne sais pas trop comment faire pour les initialiser sans que
ça devienne une usine à gaz...

Pourriez-vous me donner un coup de pouce, svp ? Merci beaucoup !
@+
Seb

2 réponses

Avatar
Laurent Moreau
Je n'ai pas tres bien compris ce que tu veux faire, mais j'attire ton
attention sur la fonction DateAdd qui peut t'aider.

ex:
DateDebut (de type datetime) = 01/05/2003

DateAdd(m,1,DateDebut) va contenir 01/06/2003
DateDdd(m,8,DateDebut) va contenir 01/01/2004

pour en extraire le mois:
month (dateadd(m,8,DateDebut))

pour année:
year (dateadd(m,8,DateDebut))

bref, je pense qu'avec DateAdd, Month, Year et ta date de début tu peux
faire tout ce que tu veux.


Laurent.



"sebcou" wrote in message
news:3f322212$
Bonjour !

Une procédure stockée reçoit en entrée deux mois et deux années. Il s'agit
d'un intervalle de 12 mois, p.ex 5-2003 à 4-2004.

Je dois ensuite exécuter un insert paramétré à l'aide de ces variables,


pour
les 12 mois (désolé le code est assez indigeste) :



EXEC ('INSERT INTO FINANZPLANMONTH (GroupByCat, Bezeichnung, Monat1,


Monat2,
Monat3, Monat4, Monat5, Monat6, Monat7, Monat8, Monat9, Monat10, Monat11,
Monat12, Reihenfolge, ID_Statuskosten)
SELECT DISTINCT TOP 100 PERCENT GroupByCat,
dbo.Finanzplan.Bezeichnung,
(SELECT SUM(Betrag)
FROM FINANZPLAN
WHERE MONTH(Falligkeitsdatum) = ' + @m1 + 'AND
YEAR(Falligkeitsdatum) = ' + @y1 + ' AND FINANZPLAN.GroupByNr > GROUPBYCAT.GroupByCat
GROUP BY FINANZPLAN.GroupByNr) AS Monat1, ...



Les variables @m1et @y1 me posent problème dans le sens où je vais devoir
calculer le changement d'année si le mois est plus grand que 12. Et comme


je
suis déjà dans ma requête insert, je ne pense pas pouvoir faire de boucle


ou
autre chose du style... Je pourrais calculer pour chaque insertion le mois
et l'année et stocker dans 2 variables, ce qui me ferait 24 variables en
plus, mais je ne sais pas trop comment faire pour les initialiser sans que
ça devienne une usine à gaz...

Pourriez-vous me donner un coup de pouce, svp ? Merci beaucoup !
@+
Seb




Avatar
sebcou
Salut !

Merci, ça parait tellement simple, mais je sais pas pourquoi je n'y ai pas
pensé tout seul.
@+
Seb


"Laurent Moreau" a écrit dans le message de news:
bgtg8j$usm$
Je n'ai pas tres bien compris ce que tu veux faire, mais j'attire ton
attention sur la fonction DateAdd qui peut t'aider.