« Vider une boîte de messages » : différence entre les versions

De Wiki1000
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
Statistique par boite à message :
'''Statistique par boite à message :'''
<pre>
<pre>
select t2.Name, count(*) from dbo.TDBFMESSAGE t0 WITH (NOLOCK)
select t2.Name, count(*) from dbo.TDBFMESSAGE t0 WITH (NOLOCK)
Ligne 9 : Ligne 9 :
</pre>
</pre>


Ce code SQL permet de vider le contenu d'une boîte à message :
'''Procédure stockée pour supprimer les messages d'une boite:'''
<pre>
IF EXISTS(SELECT * FROM sys.objects WHERE name='deleteMessages' AND type='P')
drop procedure dbo.deleteMessages
GO


Replacer chfou par le nom de la boite et '2008-01-01 00:00:00' par la date désirée
create procedure dbo.deleteMessages
@Name varchar(80),
@Date datetime
As


<pre>
BEGIN TRANSACTION
BEGIN TRANSACTION
insert into dbo.sysGlbTemp
insert into dbo.sysGlbTemp
select '000000000000000000020000811E0003',t0.oid from dbo.TDBFMESSAGE t0 WITH (NOLOCK)
select '000000000000000000020000811E0003',t0.oid from dbo.TDBFMESSAGE t0 WITH (NOLOCK)
join sysOTPs t1 on oidOTP=t0.idOTP
join TDBFMESSAGEBOXASSMESSAGE t1 on t1.oiddbfMessage = t0.oid
where (t1.oClass = 'TdbfMessage') and ((t0.ReceivedFrom = 'chfou') and (t0.DateCreate < Convert(DateTime,'2008-01-01 00:00:00',120)))
join TDBFMESSAGEBOX t2 on t2.oid= t1.oiddbfMessageBox
join sysOTPs t3 on oidOTP=t0.idOTP
where (t3.oClass = 'TdbfMessage') and ((t2.Name = @Name) and (t0.DateCreate < @Date))


insert into dbo.sysGlbTemp
insert into dbo.sysGlbTemp
select '000000000000000000020000811E0003',t0.oid from dbo.TDBFMESSAGE t0 WITH (NOLOCK)
select '000000000000000000020000811E0003',t0.oid from dbo.TDBFMESSAGE t0 WITH (NOLOCK)
join TDBFMESSAGEBOXASSMESSAGE t1 on t1.oiddbfMessage = t0.oid
join sysOTPs t1 on oidOTP=t0.idOTP
join TDBFMESSAGEBOX t2 on t2.oid= t1.oiddbfMessageBox
where (t1.oClass = 'TdbfMessage') and ((t0.ReceivedFrom = @Name) and (t0.DateCreate < @Date))
join sysOTPs t3 on oidOTP=t0.idOTP
and not t0.oid in  (select oid from dbo.sysGlbTemp where idOpe='000000000000000000020000811E0003')
where (t3.oClass = 'TdbfMessage') and ((t2.Name = 'chfou') and (t0.DateCreate < Convert(DateTime,'2008-01-01 00:00:00',120)))


insert into dbo.sysGlbTemp
insert into dbo.sysGlbTemp
Ligne 46 : Ligne 53 :


delete from dbo.sysGlbTemp where idOpe='000000000000000000870000811E0004'
delete from dbo.sysGlbTemp where idOpe='000000000000000000870000811E0004'
delete from dbo.sysGlbTemp where idOpe='000000000000000000040000811E0005'
delete from dbo.sysGlbTemp where idOpe='000000000000000000040000811E0005'
delete from dbo.sysGlbTemp where idOpe='000000000000000000020000811E0003'
delete from dbo.sysGlbTemp where idOpe='000000000000000000020000811E0003'


COMMIT TRANSACTION
COMMIT TRANSACTION
GO
</pre>
</pre>


[[Category:Boîtes à messages]]
'''Exemple :'''
 
<pre>
  exec dbo.deleteMessages '660_SF_MONO', '01/01/2014'
</pre>

Version du 15 avril 2015 à 07:05

Statistique par boite à message :

select t2.Name, count(*) from dbo.TDBFMESSAGE t0 WITH (NOLOCK)
join TDBFMESSAGEBOXASSMESSAGE t1 on t1.oiddbfMessage = t0.oid
join TDBFMESSAGEBOX t2 on t2.oid= t1.oiddbfMessageBox
join sysOTPs t3 on oidOTP=t0.idOTP
where (t3.oClass = 'TdbfMessage')
group by t2.Name order by count(*) des

Procédure stockée pour supprimer les messages d'une boite:

IF EXISTS(SELECT * FROM sys.objects WHERE name='deleteMessages' AND type='P')
drop procedure dbo.deleteMessages
GO

create procedure dbo.deleteMessages
@Name varchar(80),
@Date datetime
As

BEGIN TRANSACTION
insert into dbo.sysGlbTemp
select '000000000000000000020000811E0003',t0.oid from dbo.TDBFMESSAGE t0 WITH (NOLOCK)
join TDBFMESSAGEBOXASSMESSAGE t1 on t1.oiddbfMessage = t0.oid
join TDBFMESSAGEBOX t2 on t2.oid= t1.oiddbfMessageBox
join sysOTPs t3 on oidOTP=t0.idOTP
where (t3.oClass = 'TdbfMessage') and ((t2.Name = @Name) and (t0.DateCreate < @Date))

insert into dbo.sysGlbTemp
select '000000000000000000020000811E0003',t0.oid from dbo.TDBFMESSAGE t0 WITH (NOLOCK)
join sysOTPs t1 on oidOTP=t0.idOTP
where (t1.oClass = 'TdbfMessage') and ((t0.ReceivedFrom = @Name) and (t0.DateCreate < @Date))
and not t0.oid in  (select oid from dbo.sysGlbTemp where idOpe='000000000000000000020000811E0003')

insert into dbo.sysGlbTemp
select '000000000000000000870000811E0004',oid from dbo.TDMFDOCUMENT where oiddbfMessage in (select oid from dbo.sysGlbTemp where idOpe='000000000000000000020000811E0003')

delete from dbo.TDMFDOCUMENT
where oid in (select oid from dbo.sysGlbTemp where idOpe='000000000000000000870000811E0004')

update dbo.TDBFMESSAGE set oidAnswerTo=NULL
where oidAnswerTo in (select oid from dbo.sysGlbTemp where idOpe='000000000000000000020000811E0003')

insert into dbo.sysGlbTemp
select '000000000000000000040000811E0005',oid from dbo.TDBFMESSAGEBOXASSMESSAGE where oiddbfMessage in (select oid from dbo.sysGlbTemp where idOpe='000000000000000000020000811E0003')

delete from dbo.TDBFMESSAGEBOXASSMESSAGE
where oid in (select oid from dbo.sysGlbTemp where idOpe='000000000000000000040000811E0005')

delete from dbo.TDBFMESSAGE
where oid in (select oid from dbo.sysGlbTemp where idOpe='000000000000000000020000811E0003')

delete from dbo.sysGlbTemp where idOpe='000000000000000000870000811E0004'
delete from dbo.sysGlbTemp where idOpe='000000000000000000040000811E0005'
delete from dbo.sysGlbTemp where idOpe='000000000000000000020000811E0003'

COMMIT TRANSACTION
GO

Exemple :

  exec dbo.deleteMessages '660_SF_MONO', '01/01/2014'