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..)
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 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
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'.
Partager