[MsSQL2K5] passage d'un nom de table dans une procédure stockée
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 :
Code:
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 |
Cette Procédure Stockée fonctionne correctement.
Première version avec du SQL dynamique :
Code:
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 |
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:
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)) |
J'ai donc pensé à cette deuxième solution en concaténant les variables d'entrées :
Code:
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 |
Mais avec cette syntaxe il me lève cette erreur lorsque j'essaye d'enregistrer les modifications sur ma procedure :
Code:
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 |
J'avoue ne pas comprendre ou se situe le conflit d'opérande pour ce test.
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 ....
+++