Bonjour,
Je ne sais pas si je suis dans le bon forum pour poser cette question Mais je me lance.
J'ai crée un trigger qui se déclanche après ajout d'une ligne dans une base de donnée et lorque le trigger est activé la base de donnée se plante.
Voici l'historique de mes developpements :
J'ai tester dans un premier temps cette appel :
cette apple marche sans problème
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 declare @statement nvarchar(4000) declare @userno nvarchar(50) = 'test1' set @statement = '"C:\Log\test.exe" '+convert(nvarchar,115) +' '+@userno + ' Write' EXEC master ..xp_cmdshell @statement
ensuite j'ai testé ce trigger :
là aussi pas de problème.
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 USE [Therefore] GO /****** Object: Trigger [dbo].[TriggerSecurite] Script Date: 06/03/2015 18:26:07 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= create TRIGGER [dbo].[TriggerSecurite] ON [Therefore].[dbo].[TheCat48] AFTER insert AS BEGIN declare @NomCat nvarchar(50) = 'Courrier Donges v2' declare @statement nvarchar(4000) declare @docno int = (select inserted .docno from inserted) declare @userno nvarchar(100) = ( select ldap.login from therefore.dbo.LDAP ldap where LDAP.mail in ( select c49.Mail FROM [Therefore].[dbo].[TheCat48] c48 inner join Therefore .dbo.TheCat49 c49 on c48.ID_Instruction =c49.ID where c48.docno = @docno )) declare @catno int = (select [CtgryNo] FROM [Therefore].[dbo].[TheCategory] where name = @NomCat) -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; END
Par contre si je teste cette appel c'est le plantage.
Voici le trigger :
Avez vous une idée du pourquoi ? l'exécutable fonctionne normalement et je fait générer des logs lorsqu'il plante.
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
42
43
44
45 USE [Therefore] GO /****** Object: Trigger [dbo].[TriggerSecurite] Script Date: 06/03/2015 18:26:07 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= create TRIGGER [dbo].[TriggerSecurite] ON [Therefore].[dbo].[TheCat48] AFTER insert AS BEGIN declare @NomCat nvarchar(50) = 'Courrier Donges v2' declare @statement nvarchar(4000) declare @docno int = (select inserted .docno from inserted) declare @userno nvarchar(100) = ( select ldap.login from therefore.dbo.LDAP ldap where LDAP.mail in ( select c49.Mail FROM [Therefore].[dbo].[TheCat48] c48 inner join Therefore .dbo.TheCat49 c49 on c48.ID_Instruction =c49.ID where c48.docno = @docno )) declare @catno int = (select [CtgryNo] FROM [Therefore].[dbo].[TheCategory] where name = @NomCat) -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; set @statement = '"C:\Log\test.exe" '+convert(nvarchar,@DocNo) +' '+@userno + ' Write' EXEC master ..xp_cmdshell @statement -- Insert statements for trigger here END
Merci de votre aide.
Partager