Bonjour,

Je début sur SQL-Server et m'arrache les cheveux.

Voila j'ai développé une base access 2010 que j'ai migré en adp et je suis entrain de reprendre le code pour finaliser cette migration.
Cette application importe des donnée de différentes sources pour les stocker en base.

Au cours des importations, je commence par vérifier si de nouvelles valeurs apparaissent afin de les entrer en table "primaire" afin de créer les ids.

Pour ce faire je pensais utiliser une procédure stocké coté SQL-Server. J'ai donc créé la procédure suivante:

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
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
ALTER PROCEDURE Verif_ListdansRef 
	@Table_Imp varchar(50), 
	@Champ_Imp varchar(50),
	@Table_ref varchar(50),
	@Champ_dest varchar(50) = NULL
AS
BEGIN
	DECLARE @Req nvarchar(max)
	SET NOCOUNT ON
 
	SET @Req = N'INSERT INTO  @Table_ref (@Champ_dest)
	    SELECT @Champ_Imp
            FROM (SELECT @Table_Imp.@Champ_Imp
            From  @Table_Imp
            GROUP BY @Table_Imp.@Champ_Imp)  AS Temp LEFT JOIN @Table_ref ON Temp.@Champ_Imp = @Table_ref.@Champ_dest
            WHERE Temp.@Champ_Imp Is Not Null AND @Table_ref.@Champ_dest is not null'
	EXEC sp_executesql
		@req
		,N'@Table_Imp varchar(50),@Champ_Imp varchar(50),@Table_ref varchar(50),@Champ_dest varchar(50)'
		,@Table_Imp=@Table_Imp
		,@Champ_Imp=@Champ_Imp
		,@Table_ref=@Table_ref
		,@Champ_dest=@Champ_dest
END
GO
Quand je cherche à l'exécuter, par la commande:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
USE [Pilotage CS]
EXECUTE Verif_ListdansRef 'USysImport_RFC_CCM','Client','T_Client','Nom_client'
J'obtiens l'erreur suivante:
Msg*102, Niveau*15, État*1, Ligne*1
Syntaxe incorrecte vers '@Champ_dest'.
Msg*102, Niveau*15, État*1, Ligne*3
Syntaxe incorrecte vers '@Champ_Imp'.

j'ai beau fouiller je vois pas ce qui lui plait pas.

Serai-t-il plus simple de construire la requête dans access sous forme de nvarchar et de passer cette variable en paramètre de ma procédure? Dans ce cas comment l'exécuter?

Cordialement