Click here to monitor SSC
SQLServerCentral is supported by Red Gate Software Ltd.
 
Log in  ::  Register  ::  Not logged in
 
 
 
        
Home       Members    Calendar    Who's On


Add to briefcase

trigger and stored procedure (SQL2008 R2) Expand / Collapse
Author
Message
Posted Wednesday, August 14, 2013 8:07 AM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Group: General Forum Members
Last Login: Monday, September 16, 2013 6:20 AM
Points: 1, Visits: 14
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


Post #1484310
« Prev Topic | Next Topic »

Add to briefcase

Permissions Expand / Collapse