Click here to monitor SSC
SQLServerCentral is supported by Redgate
 
Log in  ::  Register  ::  Not logged in
 
 
 


trigger and stored procedure (SQL2008 R2)


trigger and stored procedure (SQL2008 R2)

Author
Message
hrban
hrban
Forum Newbie
Forum Newbie (1 reputation)Forum Newbie (1 reputation)Forum Newbie (1 reputation)Forum Newbie (1 reputation)Forum Newbie (1 reputation)Forum Newbie (1 reputation)Forum Newbie (1 reputation)Forum Newbie (1 reputation)

Group: General Forum Members
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
Go


Permissions

You can't post new topics.
You can't post topic replies.
You can't post new polls.
You can't post replies to polls.
You can't edit your own topics.
You can't delete your own topics.
You can't edit other topics.
You can't delete other topics.
You can't edit your own posts.
You can't edit other posts.
You can't delete your own posts.
You can't delete other posts.
You can't post events.
You can't edit your own events.
You can't edit other events.
You can't delete your own events.
You can't delete other events.
You can't send private messages.
You can't send emails.
You can read topics.
You can't vote in polls.
You can't upload attachments.
You can download attachments.
You can't post HTML code.
You can't edit HTML code.
You can't post IFCode.
You can't post JavaScript.
You can post emoticons.
You can't post or upload images.

Select a forum

































































































































































SQLServerCentral


Search