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 :
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).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.
Voici le trigger en question (réalisé à l'aide sqlpro sur ce même forum) :
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...
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
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 ?
Partager