Bonjour à tous,
Ce message car je bloque sur un problème, qui semble pourtant simple mais qui me rends fou.
j'ai un trigger after insert qui fait un insert dans une table. puis qui lance une procédure stocké. cette procédure stockée fait un simple BCP pour écrire mes données dans un fichier.
l'insertion dans la table marche sans problème.
si j’exécute ma procédure stocké manuellement ou via un job SQL agent. pas de soucis.
par contre si j’exécute a la fin du trigger ma procédure stockée. Cela agit comme si la procédure stocké ne voyait pas les lignes insérées dans le trigger.
en gros :
Run 1 => la ligne A est inséré. le trigger écrit bien la ligne dans ma table. le bcp agit comme s'il ne trouvait pas de réponse
Run 2 => La ligne B est inséré. le trigger écrit bien la ligne dans la table . le bcp fonctionne mais ne retourne comme résultat que la ligne A
mon trigger
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 CREATE TRIGGER [dbo].[matltran_STE_AfterInsert] ON [dbo].[matltran_mst] AFTER INSERT AS IF @@ROWCOUNT = 0 RETURN SET NOCOUNT ON BEGIN DECLARE @site as SiteType SELECT top 1 @site = site from parms_mst EXEC SetSiteSp @site,null DECLARE @sessionid uniqueidentifier = NEWID() ---------------------------------------------------------------------------------------------------- -- insertion dans la table temporaire des données inséré dans matltran - article no serialisé ---------------------------------------------------------------------------------------------------- insert into dbo.STE_EtiqReception ( trans_num ,item ,lot ,whse ,loc ,trans_date ,qty ,ref_num ,LocRang1 ,LocARRCP ,printed ,etiq ,sessionid ) SELECT i.trans_num , i.item , i.lot , i.whse , i.loc , i.trans_date , i.qty , i.Ref_num , l.loc ,'ARRCP' ,'NO' , case when i.loc ='CTRL' then 'CTRL' else 'STD' end , @sessionid FROM inserted as i left outer join item_mst as a on i.site_ref= a.site_ref and i.item = a.item left outer join itemloc_mst as l on i.site_ref = l.site_ref and a.item = l.item where i.trans_type='R' and i.ref_type='P' and a.serial_tracked='0' and l.rank='1' END If exists ( select 1 from STE_EtiqReception where sessionid = @sessionid) BEGIN exec STE_Rpt_EtiquetteReception --@sessionid END RETURN GO
ma SP :
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 CREATE PROCEDURE [dbo].[STE_Rpt_EtiquetteReception] AS SET NOCOUNT ON DECLARE @site as SiteType SELECT top 1 @site = site from parms_mst EXEC SetSiteSp @site,null -- declaration des variables gestion des erreurs DECLARE @Severity Int ,@MessError nvarchar(40) ,@MessNotif nvarchar(40) ---SETS SET @Severity = 0 SET @MessError = '' SET @MessNotif = '' --------******************************************************************** -------- CREATION de la ligne données Masque STD --------******************************************************************** if exists (select 1 from dbo.STE_EtiqReception where printed = 'NO') BEGIN declare @DATEFIC nvarchar(14) = Format(getdate(), N'yyMMddHHmmss') ,@lignedata varchar(8000) ,@movefile varchar(8000) ,@DBartender varchar(100) = '\\emea\emeashares\Bordeaux\DONNEES TECHNIQUES\Etiquettes_CB\50)DossierEtiquettesCB\BARTENDER\' ,@DSetting varchar(20) ='Settings\' ,@Dtrigger varchar(20) ='trigger' ,@sql nvarchar(max) ,@execSQL varchar(8000) ,@Copyfile varchar(4000) ,@sessionid uniqueidentifier = newid() --------******************************************************************** -------- CREATION de la ligne données Masque STD --------******************************************************************** if exists (select 1 from dbo.STE_EtiqReception where printed = 'NO' and loc <> 'CTRL') BEGIN SET @sql= ' SELECT item + '';'' + isnull(replace(lot,'' '',''''),'''') + '';'' + whse + '';'' + loc + '';'' + Format(trans_date, N''dd-MM-yyyy'') + '';'' + cast(cast (qty as decimal (10,3)) as nvarchar) + '';'' + Ref_num + '';'' + isnull(replace(ser_num,'' '',''''),'''') + '';'' + locrang1 + '';'' + locarrcp FROM ' + DB_NAME() + '.dbo.STE_EtiqReception where printed=''NO'' and loc <> ''CTRL''' --Générer le fichier d export SET @execSQL = 'bcp "' + REPLACE(REPLACE(REPLACE(@sql,char(10),''),char(13),''),char(9),'') +'" queryout "'+ @DBartender + @DSetting + 'std_' + cast(@sessionid as varchar(40)) + '.dat" -c -T' select @execSQL exec master..xp_cmdshell @execSQL END END GO
Partager