Bonjour, je désir créer une procédure stockée, mais quelque chose accroche et ça ne fonctionne pas. Je vous fais la mise en situation, j'ai copié plus bas mon code, et j'ai aussi copié les 2 erreurs que SQL me sort.

Je tente de faire cela avec SQL Management Studio pour SQL Server 2005

J'ai 2 tables (qui sont en fait des vues)


-ADM.VPlans

Champs : NO_PLAN, titre

-ADM.VPlans_Secteurs

Champs : NO_PLAN, Secteur

« NO_PLAN » contient les mêmes numéros de plans que le champ « NO_PLAN » de ADM.VPlans, de sorte que pour chaque ligne de ADM.VPlans, je peux avoir dans ADM.VPlans_Secteurs n lignes, dépendamment si j'ai 0, 1 ou n « Secteur » différents pour un même NO_PLAN.


Mon but est d'avoir une table :

-ADM.VPlans_Complets

Champs : NO_PLAN, titre, Secteurs

« Secteurs » doit contenir la list des Secteurs, séparés par des virgules

Ex : (dsl si ce n'est pas tout à fait clair, mais la page d'édition du message ne prend pas en compte les Tabulations et les suites d'espaces... Vous avez le nom des tables, le nom des champs, et ensuite les données..)


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
V3R.ADM.VPlans--|--V3R.ADM.VPlans_Secteur--|--V3R.ADM.VPlans_Complets 
 
 
 NO_PLAN---titre--|--NO_PLAN---Secteur---|--NO_PLAN---titre---Secteurs 
 
1----------tata---|----1----------TR-----|-----1--------tata----TR,CAP 
2----------titi---|----1----------CAP----|-----2--------titi------CAP 
3----------toto---|----2----------CAP----|-----3--------toto-----TR,TRO 
------------------|----3----------TR 
------------------|----3----------TRO
Voilà procédure stockée :



Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
43
44
45
46
47
48
CREATE PROCEDURE dbo.MergeMyTwoTables AS
 
DELETE * FROM V3R.ADM.VPlans_Complets
 
DECLARE @NO_PLAN int 
 
DECLARE @titre varchar(1000) 
 
 
DECLARE @Concatenated varchar(2000) 
 
 
DECLARE cursorSourceTable CURSORFORSelect NO_PLAN, titre FROM V3R.ADM.VPlans ORDERBY NO_PLAN ASC 
 
OPEN cursorSourceTable 
 
 
FETCH NEXT FROM cursorSourceTable INTO @NO_PLAN, @titre 
 
WHILE @@FETCH_STATUS <> - 1 BEGIN 
 
 
      --For this line, get all values from sub-lines and concatenate them 
 
      SELECT @Concatenated  =null 
 
      SELECT @Concatenated =coalesce(@Concatenated +', ','')+cast(Secteur asvarchar(40))
      FROM V3R.ADM.VPlans_Secteurs 
      WHERE NO_PLAN = @NO_PLAN 
 
 
 
      --Insert result in ADM.VPlans_Complets 
 
      INSERT INTO V3R.ADM.VPlans_Complets (NO_PLAN, titre, Secteurs)
      VALUES (@NO_PLAN, @titre, coalesce(@Concatenated,'') 
 
 
 
      FETCH NEXTFROM cursorSourceTable INTO @NO_PLAN, @titre 
 
END 
 
CLOSE cursorSourceTable 
 
DEALLOCATE cursorSourceTable 
 
GO



Et ensuite, je créerais une Tâche planifiée pour répéter la procédure plusieurs fois par jour avec la commande

Requête sql pour runner la stored proc:
Exec MergeMyTwoTables

Voilà les messages d'erreur que SQL me donne lorsque j'exécute ma procédure. Je ne comprend pas.


Msg 102, Niveau 15, État 1, Procédure MergeMyTwoTables, Ligne 3

Syntaxe incorrecte vers '*'.

Msg 156, Niveau 15, État 1, Procédure MergeMyTwoTables, Ligne 23

Syntaxe incorrecte vers le mot clé 'FETCH'.