Bonjour,
Je rencontre un soucis de syntaxe avec du SQL dynamique afin de faire passer en paramètre de ma procédure stockée le nom partiel de ma table.
J'ai utilisé la syntaxe présentée ici.
Ma procédure initiale sans SQL dynamique :
Cette Procédure Stockée fonctionne correctement.
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 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[TEST_PS_Insert_Cas_Annulation] @id_bon_peinture int, @id_cas_annulation int, @precision_refus_peinture text AS BEGIN SET NOCOUNT ON; INSERT INTO DEV_REL_ANNULATION ( id_bon_peinture, id_cas_annulation, precision_refus_peinture ) Values (@id_bon_peinture, @id_cas_annulation, @precision_refus_peinture ) END
Première version avec du SQL dynamique :
Je n'ai pas d'erreur de syntaxe. Cependant lorsque j'exécute dans le requêteur Microsoft SQL Serveur Management Studio Express j'obtient le message d'erreur suivant :
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 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[TEST_PS_Insert_Cas_Annulation] @nom_serveur varchar(10), @id_bon_peinture int, @id_cas_annulation int, @precision_refus_peinture text AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @Ma_Requete varchar (8000) -- Insert statements for procedure here SET @Ma_Requete = 'INSERT INTO '+@nom_serveur+'_REL_ANNULATION ( id_bon_peinture, id_cas_annulation, precision_refus_peinture ) Values (@id_bon_peinture, @id_cas_annulation, @precision_refus_peinture )' EXEC (@Ma_Requete) END
J'ai donc pensé à cette deuxième solution en concaténant les variables d'entrées :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Msg 137, Niveau 15, État 2, Ligne 8 La variable scalaire "@id_bon_peinture" doit être déclarée. (1 ligne(s) affectée(s))
Mais avec cette syntaxe il me lève cette erreur lorsque j'essaye d'enregistrer les modifications sur ma procedure :
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 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[TEST_PS_Insert_Cas_Annulation] @nom_serveur varchar(10), @id_bon_peinture int, @id_cas_annulation int, @precision_refus_peinture text AS BEGIN SET NOCOUNT ON; DECLARE @Ma_Requete varchar (8000) SET @Ma_Requete = 'INSERT INTO '+@nom_serveur+'_REL_ANNULATION ( id_bon_peinture, id_cas_annulation, precision_refus_peinture ) Values ('+@id_bon_peinture+','+ @id_cas_annulation+','+ @precision_refus_peinture+' )' EXEC (@Ma_Requete) END
J'avoue ne pas comprendre ou se situe le conflit d'opérande pour ce test.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Msg*206, Niveau*16, État*2, Procédure*TEST_PS_Insert_Cas_Annulation, Ligne*24 Conflit de types d'opérandes*: text est incompatible avec int
Si qqn à une idée sur la syntaxe des paramètre d'entrée dans du SQL dynamique.
Merci d'avance.
Je continue à chercher d'où cela peut bien venir ....
+++
Partager