Bonjour à tous,
Je suis confrontée à un problème d'appel d'une procédure stockée à partir d'une autre, qui elle appelle une 3ème.
[dbo].[P_TEST_P1] ==> [dbo].[P_TEST_P2]==> [dbo].[P_TEST_TABLE]
L'exécution de la procédure [dbo].[P_TEST_P2] qui appelle [dbo].[P_TEST_TABLE] fonctionne sans problème. Mais lorsque j'exécute [dbo].[P_TEST_P1], j'obtiens l'erreur:
"P_TEST_P2 Insert Error: Column name or number of supplied values does not match table definition."
Or je pense que ce n'est pas un problème de nom ou du nombre de colonne. Car il suffit que dans la procédure P_TEST_P1 je remplace P_TEST_P2 par P_TEST_TABLE et ça fonctionne. Mon problème est donc celui d'appel de procédure stockée au 3ème niveau.
Merci pour toute aide.
- Procédure de base ([dbo].[P_TEST_TABLE])
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 CREATE PROCEDURE [dbo].[P_TEST_TABLE] @p_SqlMessageRetour nvarchar(256) = '' output AS SET XACT_ABORT ON; SET NOCOUNT ON; BEGIN TRY CREATE TABLE #T_PERIODE(IdPeriode int,Mois nvarchar(20)) INSERT INTO #T_PERIODE (IdPeriode,mois) VALUES (1,'Janvier') INSERT INTO #T_PERIODE (IdPeriode,mois) VALUES (2,'Février') SELECT * FROM #T_PERIODE IF OBJECT_ID(N'[TEMPDB].[dbo].[#T_PERIODE]', N'U') IS NOT NULL DROP TABLE #T_PERIODE ; RETURN 0 END TRY BEGIN CATCH SET @p_SqlMessageRetour=ISNULL(error_procedure(),'') + ' ' + ISNULL(error_message(),''); SELECT @p_SqlMessageRetour; RETURN ISNULL(error_number(),1); END CATCH
- Procédure de base ([dbo].[P_TEST_P2])
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 CREATE PROCEDURE [dbo].[P_TEST_P2] @p_SqlMessageRetour nvarchar(256) = '' output AS SET XACT_ABORT ON; SET NOCOUNT ON; BEGIN TRY CREATE TABLE #T_PERIODE(IdPeriode int , Mois nvarchar(20)) INSERT INTO #T_PERIODE EXECUTE [dbo].[P_TEST_TABLE] @p_SqlMessageRetour OUTPUT SELECT * FROM #T_PERIODE IF OBJECT_ID(N'[TEMPDB].[dbo].[#T_PERIODE]', N'U') IS NOT NULL DROP TABLE #T_PERIODE ; RETURN 0 END TRY BEGIN CATCH SET @p_SqlMessageRetour=ISNULL(error_procedure(),'') + ' ' + ISNULL(error_message(),''); SELECT @p_SqlMessageRetour; RETURN ISNULL(error_number(),1); END CATCH
- Procédure de base ([dbo].[P_TEST_P1])
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 CREATE PROCEDURE [dbo].[P_TEST_P1] @p_SqlMessageRetour nvarchar(256) = '' output AS SET XACT_ABORT ON; SET NOCOUNT ON; BEGIN TRY CREATE TABLE #T_PERIODE(IdPeriode int , Mois nvarchar(20)) INSERT INTO #T_PERIODE EXECUTE [dbo].[P_TEST_P2] @p_SqlMessageRetour OUTPUT SELECT * FROM #T_PERIODE IF OBJECT_ID(N'[TEMPDB].[dbo].[#T_PERIODE]', N'U') IS NOT NULL DROP TABLE #T_PERIODE ; RETURN 0 END TRY BEGIN CATCH PRINT 'TEST' SET @p_SqlMessageRetour=ISNULL(error_procedure(),'') + ' ' + ISNULL(error_message(),''); SELECT @p_SqlMessageRetour; RETURN ISNULL(error_number(),1); END CATCH
Partager