August 14, 2013 at 8:07 am
Hy there,
i have following problem:
i have a table A, table B and table C with a trigger (after insert, update).
All tables have the same primary key inserted.
Of course, when datas are changing in table "auftragkopf " , triggers fires (triggers will select data from inserted and write these datas to another table)
Second i have a stored procedure A where every 15 minutes an insert in table A happened and also all
datas from one dataset are selected an written in another table.
Now i habe the problem, that when the sgtored procedure is running, they key changes and the job failed.
For example:
Table A gets a value "1"
Table B gets a value "1"
Table C gets a value "1"
Trigger starts on Table A (and write this new value to another table). At the same time the stored procedure is running
and insert datas and select all datas from table A, tabble B and table C.
When a select the table, where datas are inserted from the stored procedure, following datas are inserted:
Table A gets a value "1"
Table B gets a value "1"
Table C gets a value "2"
Thats wrong, because all values MUST BE "1".
Here is the stored procedure (runs every 15 minute)
USE [BD]
GO
/****** Object: StoredProcedure [dbo].[Collect] Script Date: 08/14/2013 16:00:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:<Author,,Name>
-- Create date: <Create Date,,>
-- Description:<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Collect
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
if (select count(*) from [vb-srv-db1].rls.dbo.vw_getnewrecords) >0
begin
SET XACT_ABORT ON
BEGIN TRANSACTION
declare @maxint int
delete from tbl_NewRecords
insert into tbl_NewRecords select int_nummer from [vb-srv-db1].rls.dbo.vw_getnewrecords
delete from [vb-srv-db1].rls.dbo.tbl_NewRecords
insert into [vb-srv-db1].rls.dbo.tbl_NewRecords select * from tbl_NewRecords
select @maxint = max(int_nummer) from auftragkopf
If (IDENT_CURRENT('auftragkopf')>@maxint) DBCC CHECKIDENT ('auftragkopf', RESEED,@maxint)
insert into auftragkopf (UId, Buchungsdatum, Flags, Flags2, Jahr, Laufnummer, LandesverbandNr, BezirksstelleNr, OrtsstelleNr, Kennung, Orgjahr, Orglaufnr,
Auftragsnr, Protokollnr, Patientnr, Fahrzeugnr, Sammelauftnr, Uebernahmenr, Uebernahmedat, EinsatzNr, EinsatzNrZusatz, Klinik, Ecpnummer,
Knotenname, Chronologie, Mehrfachtra, Rechnungsdatum, Rechnungsnr, Selbstbehdatum, Selbstbehrechnr, Sammelrechdatum, Sammelrechnr,
DatentraegerNr, AbrechnungsNr, FibuueberNr, BearbeitModell, AbrechDatum, AbrechModell, UeberleitModell, OPModell, Fehlerliste, Meldung,
Zugriff_art, Zugriff_von, Zugriff_terminal, Rls_updaten)
select UId, getdate(), Flags, Flags2, Jahr, Laufnummer, LandesverbandNr, BezirksstelleNr, OrtsstelleNr, Kennung, Orgjahr, Orglaufnr,
Auftragsnr, Protokollnr, Patientnr, Fahrzeugnr, Sammelauftnr, Uebernahmenr, Uebernahmedat, EinsatzNr, EinsatzNrZusatz, Klinik, Ecpnummer,
Knotenname, Chronologie, Mehrfachtra, Rechnungsdatum, Rechnungsnr, Selbstbehdatum, Selbstbehrechnr, Sammelrechdatum, Sammelrechnr,
DatentraegerNr, AbrechnungsNr, FibuueberNr, BearbeitModell, AbrechDatum, AbrechModell, UeberleitModell, OPModell, Fehlerliste, Meldung,
Zugriff_art, Zugriff_von, Zugriff_terminal, Rls_updaten
from [vb-srv-db1].rls.dbo.auftragkopf
where int_nummer in (select int_nummer from rls.dbo.tbl_NewRecords)
IF @@ERROR <> 0 GOTO ON_ERROR
insert into auftrag (Buchungsdatum, Int_nummer, Melder, Rueckruf1, Interface1, Name, Patientinfo, Rueckruf2, Interface2, Auftraggeber, AuftraggebFg,
AuftraggebNr, Rueckruf3, Interface3, Lokalisat, Abholort, Abh_pq, Abh_land, Abh_plz, Abh_ort, Abh_ortkz, Abh_haus, Abh_klasse, Abh_vpnr, Abh_objekt,
Abholweg, Abholinfo, Zielort, Zie_pq, Zie_land, Zie_plz, Zie_ort, Zie_ortkz, Zie_haus, Zie_klasse, Zie_vpnr, Zie_objekt, Zielweg, Zielinfo,
VerrDiagnose, VerrDiagnoseNr, VerrDiagnoseText, Diagnose, Diagnosenr, Einstufung, Einstkurz, Einsatzart, Einsatzbez, Transpoart, Transpobez,
Bemerkung1, Bemerkung2, Bemerkung3, Freitext, Verrdiagcode, Diagnosecode, Einstcode, Einsatzcode, Transpocode, Verscode, VEAart, VEAbez,
Kennzeich, Type, Typekurz, Fahrz_art, Statusnummer, Besatz1, Besatz1_nr, Besatz2, Besatz2_nr, Besatz3, Besatz3_nr, Besatz4, Besatz4_nr,
Schicht, Schicht_von, Schicht_bis, Dienstart, Aufnahmezeit, Sollzeit, Meldezeit, Alarmzeit, Beginnzeit, Beginnlok, Abholzeit, Abhollok, Abfahrtszeit,
Zielzeit, Ziellok, Endezeit, Standortzeit, Einsatz_ab, Einsatz_zi, Zugriff_art, Zugriff_von, Zugriff_terminal, DispoNr, Transportbez, NACACode)
select getdate(), 0, Melder, Rueckruf1, Interface1, Name, Patientinfo, Rueckruf2, Interface2, Auftraggeber, AuftraggebFg,
AuftraggebNr, Rueckruf3, Interface3, Lokalisat, Abholort, Abh_pq, Abh_land, Abh_plz, Abh_ort, Abh_ortkz, Abh_haus, Abh_klasse, Abh_vpnr, Abh_objekt,
Abholweg, Abholinfo, Zielort, Zie_pq, Zie_land, Zie_plz, Zie_ort, Zie_ortkz, Zie_haus, Zie_klasse, Zie_vpnr, Zie_objekt, Zielweg, Zielinfo,
VerrDiagnose, VerrDiagnoseNr, VerrDiagnoseText, Diagnose, Diagnosenr, Einstufung, Einstkurz, Einsatzart, Einsatzbez, Transpoart, Transpobez,
Bemerkung1, Bemerkung2, Bemerkung3, Freitext, Verrdiagcode, Diagnosecode, Einstcode, Einsatzcode, Transpocode, Verscode, VEAart, VEAbez,
Kennzeich, Type, Typekurz, Fahrz_art, Statusnummer, Besatz1, Besatz1_nr, Besatz2, Besatz2_nr, Besatz3, Besatz3_nr, Besatz4, Besatz4_nr,
Schicht, Schicht_von, Schicht_bis, Dienstart, Aufnahmezeit, Sollzeit, Meldezeit, Alarmzeit, Beginnzeit, Beginnlok, Abholzeit, Abhollok, Abfahrtszeit,
Zielzeit, Ziellok, Endezeit, Standortzeit, Einsatz_ab, Einsatz_zi, Zugriff_art, Zugriff_von, Zugriff_terminal, DispoNr, Transportbez, NACACode
from [vb-srv-db1].rls.dbo.auftrag
where int_nummer in (select int_nummer from rls.dbo.tbl_NewRecords)
IF @@ERROR <> 0 GOTO ON_ERROR
insert into auftragnacherf (Buchungsdatum, Int_nummer, Km_start, Km_ende, Km_gefahren, Km_1auftnr, Km_2auftnr, Km_3auftnr, Km_4auftnr, Km_1inland,
Km_2inland, Km_3inland, Km_4inland, Km_1ausland, Km_2ausland, Km_3ausland, Km_4ausland, Nachname, Vorname, Geschlecht, Gebdatum, Land,
Plz, Ort, Strasse, Ver_nummer, Ver_name, Ver_vornam, Ver_geschl, Ver_gebdat, Ver_land, Ver_strass, Ver_plz, Ver_ort, Versverhaeltnis, Dienstgeb,
Dienstplz, Dienstort, Versicher, Versich2, Versich3, VersId, VersId2, VersId3, Versnummer, Selbstbeh, Betragerh, Verrdiag, Verrdiagnr, Verbemerk1,
Verbemerk2, Verbemerk3, RE_Nachname, RE_Vorname, RE_Plz, RE_Ort, RE_Strasse, RE_Land, Naca, TABei, TAAuchFuer, PatiAnzahl, InkBetrag,
InkNummer, InkText, InkArt, OPBezahlt, Kostenstelle, HerstName, HerstKfz, HerstPlz, HerstOrt, HerstStrasse, VertragspNr, VertragspDVR,
VertragspBLZ, VertragspKtoNr, Sammeltransport, Ortspauschale, Selbstbehalt, Uebergabe, Gebuehrenbefreit, Rkmitglied, Gegentransport, IntErhebung,
Fernfahrt, Nacherfasst, Chefarztpflicht, Mwst, NichtVerrechenbar, Ruecktransport, Mehrfachtransport, Kostenuebernahme, Revers, AufschlRabatt,
AufschlagAusw, RabattAusw, Bearbeitungsgebuehr, Wartezeit, Porto, Mitgliedrabatt, Zugriff_art, Zugriff_von, Zugriff_terminal)
select getdate(), 0, Km_start, Km_ende, Km_gefahren, Km_1auftnr, Km_2auftnr, Km_3auftnr, Km_4auftnr, Km_1inland,
Km_2inland, Km_3inland, Km_4inland, Km_1ausland, Km_2ausland, Km_3ausland, Km_4ausland, Nachname, Vorname, Geschlecht, Gebdatum, Land,
Plz, Ort, Strasse, Ver_nummer, Ver_name, Ver_vornam, Ver_geschl, Ver_gebdat, Ver_land, Ver_strass, Ver_plz, Ver_ort, Versverhaeltnis, Dienstgeb,
Dienstplz, Dienstort, Versicher, Versich2, Versich3, VersId, VersId2, VersId3, Versnummer, Selbstbeh, Betragerh, Verrdiag, Verrdiagnr, Verbemerk1,
Verbemerk2, Verbemerk3, RE_Nachname, RE_Vorname, RE_Plz, RE_Ort, RE_Strasse, RE_Land, Naca, TABei, TAAuchFuer, PatiAnzahl, InkBetrag,
InkNummer, InkText, InkArt, OPBezahlt, Kostenstelle, HerstName, HerstKfz, HerstPlz, HerstOrt, HerstStrasse, VertragspNr, VertragspDVR,
VertragspBLZ, VertragspKtoNr, Sammeltransport, Ortspauschale, Selbstbehalt, Uebergabe, Gebuehrenbefreit, Rkmitglied, Gegentransport, IntErhebung,
Fernfahrt, Nacherfasst, Chefarztpflicht, Mwst, NichtVerrechenbar, Ruecktransport, Mehrfachtransport, Kostenuebernahme, Revers, AufschlRabatt,
AufschlagAusw, RabattAusw, Bearbeitungsgebuehr, Wartezeit, Porto, Mitgliedrabatt, Zugriff_art, Zugriff_von, Zugriff_terminal
from [vb-srv-db1].rls.dbo.auftragnacherf
where int_nummer in (select int_nummer from rls.dbo.tbl_NewRecords)
IF @@ERROR <> 0 GOTO ON_ERROR
update auftrag set int_nummer=buchungsnummer where int_nummer=0
IF @@ERROR <> 0 GOTO ON_ERROR
update auftragnacherf set int_nummer=buchungsnummer where int_nummer=0
IF @@ERROR <> 0 GOTO ON_ERROR
exec [vb-srv-db1].rls.dbo.sp_SetFlags
IF @@ERROR <> 0 GOTO ON_ERROR
insert into tbl_Log select 7,getdate(),count(*) from rls.dbo.tbl_NewRecords
IF @@ERROR <> 0 GOTO ON_ERROR
print 'commit'
COMMIT TRANSACTION
IF @@ERROR <> 0 GOTO ON_ERROR
GOTO OK
ON_ERROR:
IF @@TRANCOUNT > 0 begin
ROLLBACK TRANSACTION
print 'error'
end
SET XACT_ABORT ON
OK:
set nocount off
SET XACT_ABORT ON
end
end
HERE IS THE TRIGGER (from table A):
USE [DB]
GO
/****** Object: Trigger [dbo].[Changed_Data_AuftragKopf] Script Date: 08/14/2013 16:04:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Changed_Data_AuftragKopf]
ON [dbo].[AuftragKopf]
AFTER INSERT,UPDATE
AS
BEGIN
DECLARE @Int_Nummer INT
SET @Int_Nummer = 0
SET NOCOUNT ON;
SELECT @Int_Nummer = Int_Nummer FROM dbo.AuftragKopf WHERE Int_Nummer = (Select Int_Nummer from inserted)
IF (SELECT distinct Int_Nummer FROM dbo.AuftragKopf WHERE Int_Nummer in (select Int_Nummer from dbo.Auftrag_DML) and Int_Nummer = (Select Int_Nummer from inserted)) is null and substring((Select Flags from inserted),3,1)=1
BEGIN
INSERT INTO dbo.Auftrag_DML (Int_nummer, DML, ErstellDatum) VALUES(@Int_Nummer , 1 , getdate())
END
ELSE
BEGIN
UPDATE dbo.Auftrag_DML SET DML = 1, ErstellDatum = getdate()
WHERE Int_Nummer = @Int_Nummer
END
--Bereinigen von alten Daten älter als 10 Tagen; bei jeder Datensatzänderung wird geprüft
delete FROM [rls].[dbo].[Auftrag_DML] where DATEDIFF(day, getdate(),erstelldatum) < -10
END
How can i avoid that trigger and SP mix datas and whats the reason?
Thank you,
Chris
Viewing 0 posts
You must be logged in to reply to this topic. Login to reply