Problème avec un trigger + xp_cmdshell + executable
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 :
Code:
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 |
cette apple marche sans problème :D
ensuite j'ai testé ce trigger :
Code:
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 |
là aussi pas de problème.:D
Par contre si je teste cette appel c'est le plantage. :calim2:
Voici le trigger :
Code:
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 |
Avez vous une idée du pourquoi ? l'exécutable fonctionne normalement et je fait générer des logs lorsqu'il plante.
Merci de votre aide.