Bonjour à tous,

Je rencontre actuellement un problème avec une procédure stockée qui fait une insertion dans une vue portant sur 2 tables.

J'ai bien sûr un trigger instead of insert sur la vue pour permettre l'insertion correctement dans chacune des tables et l'une des tables a également un trigger instead of update mais sql server m'informe qu'il y a une erreur dans le trigger mais les informations fournies ne sont pas d'une grande aide...

Voici le message d'erreur retourner lors de l'exécution de la procédure :
Msg 50000, Level 16, State 1, Procedure TR_INSTEAD_OF_INSERT_SSE, Line 31
Erreur dans trigger
Msg 3616, Level 16, State 1, Procedure TR_INSTEAD_OF_INSERT_VSS, Line 7
An error was raised during trigger execution. The batch has been aborted and the user transaction, if any, has been rolled back.
D'après ce message, j'en conclus donc qu'il y a une erreur dans le trigger de la table (TR_INSTEAD_OF_INSERT_SSE) qui fait que du coup, le trigger de la vue (TR_INSTEAD_OF_INSERT_VSS) plante aussi (logique).

Voici le trigger en question (réalisé à l'aide sqlpro sur ce même forum) :
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
 
USE [GIFT_MANAGEMENT_TEST_ICT]
GO
/****** Object:  Trigger [dbo].[TR_INSTEAD_OF_INSERT_SSE]    Script Date: 01/29/2013 13:11:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
 
ALTER TRIGGER [dbo].[TR_INSTEAD_OF_INSERT_SSE] ON [dbo].[T_STORE_STOCK_ENTREE_SSE]
INSTEAD OF INSERT
AS
BEGIN
    SET NOCOUNT ON;    
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
 
    BEGIN TRY;
        WITH T0 AS (SELECT GFT_ID, STR_ID, SSE_DATE_IN, ROW_NUMBER() OVER(PARTITION BY GFT_ID ORDER BY GFT_ID) AS 'ROW_NUM'
                    FROM INSERTED)
        INSERT INTO [T_STORE_STOCK_ENTREE_SSE] (GFT_ID, SSE_ID, STR_ID, SSE_DATE_IN)
        SELECT    T0.GFT_ID,
                COALESCE(MAX(SSE.SSE_ID),0) + ROW_NUM,
                T0.STR_ID,
                T0.SSE_DATE_IN
        FROM    [T_STORE_STOCK_ENTREE_SSE] AS SSE
                    RIGHT OUTER JOIN T0
                        ON    SSE.GFT_ID = T0.GFT_ID
        GROUP BY T0.GFT_ID,
                 T0.STR_ID,
                 T0.SSE_DATE_IN,
                 T0.ROW_NUM
 
        SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
    END TRY
 
    BEGIN CATCH
        SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
        RAISERROR('Erreur dans trigger', 16, 1)
    END CATCH    
END
Le souci est que la ligne 31 est la dernier de la clause SELECT et je ne vois ce qui cloche avec cette dernière...
Est-il possible de remplacer le message harcodé "Erreur dans trigger" par un genre de variable propre à sql server qui contiendrait le "vrai" message d'erreur de manière à en savoir un peu plus ?

Cela existe-t-il ?