mschaedler1982
Goto Top

Fehler bei SQL Abfrage - Filter Funktion

Hallo zusammen,

Wir haben hier eine SQL Abfrage erstellt (funktioniert soweit auch alles) nur wenn wir das ganze als Schedulded Task laufen lassen erhalten wir einen Fehler. > SQL Server Agent -> Jobs

Wie gesagt die Abfrage funktioniert. SQL 2012 ist im Einsatz

DECLARE @job_name varchar(256) 
DECLARE @subject nvarchar(max)
DECLARE @body nvarchar(max)
DECLARE @xml nvarchar(max)
DECLARE @recipients varchar(256)
DECLARE @COUNT	int

 -- Freigegebene  Archivzeichnung mit Nr, zu der es eine alte Archivzeichnung
 -- in Konstruktion/Freigabe gibt mit identischer Nr
 
 -- Archivzeichnungen ermitteln
 -- Tabelle anlegen und Werte zwischenspeichern
 CREATE TABLE #TTEMP
(
	[DocID]	int,
	[ReinzNr]	int,
	[ProjektNr]	int,	-- E
	[TeilprojektNr] int,	-- 
	[Erstelldatum] numeric (16,6) -- 
)
 --select vb_objidnr1,d1.do_ext,vb_objidnr2,d2.DO_EXT,dv1.D2_VFLO33,d2.DO_CDATE from
 insert into #TTEMP
 select DO_IDNR as DocID, ReinzNr,dv_vstl6 as ProjektNr,dv_vstl8 as TeilProjektNr,do_dcdate as Erstelldatum --,datediff (day, [dbo].[PRO_FN_GetSQLDateTimeUTC]( DO_DCDATE) ,  GETUTCDATE()) 
from
(select ReinzNr from 
(select DV_VSTL1 as Nr from dokstamm 
inner join SPERREN on SP_OBJIDNR=DO_IDNR and SP_OBJTYP=3 and SP_ART=10 and SP_KENN=200
inner join DOKVAR on DV_IDNR=DO_IDNR and DV_VSTL1 like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'  
where do_dtnr=5
and   datediff (day, [dbo].[PRO_FN_GetSQLDateTimeUTC]( DO_DCDATE) ,  GETUTCDATE())=1
and DO_VERSIONCOUNT=DO_VERSIONINDEX) t
inner join DOKVAR on t.ReinzNr=DV_VSTL1
inner join DOKSTAMM on DV_IDNR=DO_IDNR and do_dtnr=5 and DO_VERSIONCOUNT=DO_VERSIONINDEX
inner join SPERREN on SP_OBJIDNR=DO_IDNR and SP_OBJTYP=3 and SP_ART=10 and SP_KENN in (0,200)
and datediff (day, [dbo].[PRO_FN_GetSQLDateTimeUTC]( DO_DCDATE) ,  GETUTCDATE())>2) t1
inner join DOKVAR on t1.ReinzNr=DV_VSTL1
inner join DOKSTAMM on DV_IDNR=DO_IDNR and do_dtnr=5 and DO_VERSIONCOUNT=DO_VERSIONINDEX
inner join SPERREN on SP_OBJIDNR=DO_IDNR and SP_OBJTYP=3 and SP_ART=10 and SP_KENN in (0,200)
order by ReinzNr,Erstelldatum
 
-- Auswertung: 
-- E-Mail an xy

select @COUNT=count(*) from #TTEMP

if @COUNT >0
begin
-- Change your email address to email distribution group or person who needs to get 
-- Success Notification
SET @recipients = 'user@domain.com'  
set @job_name = 'SendDailyReport-Nr-Check'  
--FROM msdb..sysjobs 
--WHERE job_id = $(ESCAPE_SQUOTE(JOBID))
SET @subject = 'Daily Report on Nr-Check'  

SET @xml = CAST(( SELECT DocID AS 'td', ' ',ReinzNr AS 'td', ' ',ProjektNr AS 'td', ' ',TeilprojektNr AS 'td', ' ',Erstelldatum AS 'td'  
FROM  #TTEMP -- ORDER BY Rank 
FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))  

 set @body  ='<html><body><H3>Nr. Info</H3>  
<table border = 1> 
<tr>
<th>Dokument-Nr. </th> <th> Nr.</th> <th> Projekt-Nr.</th> <th> Teilprojekt-Nr.</th> <th>Erstelldatum</th>'   

set @body = @body + @xml +'</table></body></html>'  

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'ProfileMailService',  
@recipients = @recipients,
@body = @body,
@body_format ='HTML',  
@subject = @subject ;

end

DROP TABLE #TTEMP

Output.

Nr. Info
Dokument-Nr. 	Nr.	Projekt-Nr.	Teilprojekt-Nr.	Erstelldatum
583150	701066881	15966	230	20160519.073407
583150	701066881	15966	230	20160519.073407
583150	701066881	15966	230	20160519.073407
583150	701066881	15966	230	20160519.073407
583972	701066881	15966	230	20160601.081418
583972	701066881	15966	230	20160601.081418
583975	701066881	15966	230	20160601.082214
583975	701066881	15966	230	20160601.082214
584001	701066881	15966	230	20160601.083742
584001	701066881	15966	230	20160601.083742
583972	701066881	15966	230	20160601.081418
583972	701066881	15966	230	20160601.081418
583975	701066881	15966	230	20160601.082214
583975	701066881	15966	230	20160601.082214
584001	701066881	15966	230	20160601.083742
584001	701066881	15966	230	20160601.083742
583976	701066881	15966	230	20160601.082749
583976	701066881	15966	230	20160601.082749
583976	701066881	15966	230	20160601.082749
583976	701066881	15966	230	20160601.082749

Und nun zum Fehler.

Wenn wir die SQL Abfrage manuell laufen lassen kommen die Zeilen wie Dokument Nr. 583150 oder 583972 nur einmal aber wenn wir dieselbe Abfrage automatisch als Job laufen lassen, dann erhalten wir das Ergebnis wie oben.

Kann man den Output unter umständen filtern, so dass eine Dokumenten Nr. nur einmal vorkommt?

Gruss

MS

Content-ID: 306137

Url: https://administrator.de/contentid/306137

Ausgedruckt am: 25.11.2024 um 23:11 Uhr

ukulele-7
Lösung ukulele-7 06.06.2016 um 08:11:59 Uhr
Goto Top
Man könnte mit DISTINCT aber ich kann mir nur schwer vorstellen warum eine Abfrage manuell ein anderes Ergebnis liefert als "automatisch". Ich würde unbedingt die Ursache suchen.
mschaedler1982
mschaedler1982 27.06.2016 um 10:43:16 Uhr
Goto Top
Danke erstamal für den Hinweis.

Wir haben das ganze nun mit dieser Zeile gelöst.
group by DO_IDNR,Nr,dv_vstl6,dv_vstl8,DO_DCDATE