AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken [MSSQL 2005] Speed Problem mit Update Trigger
Thema durchsuchen
Ansicht
Themen-Optionen

[MSSQL 2005] Speed Problem mit Update Trigger

Ein Thema von ferby · begonnen am 4. Aug 2008 · letzter Beitrag vom 5. Aug 2008
 
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#1

[MSSQL 2005] Speed Problem mit Update Trigger

  Alt 4. Aug 2008, 16:02
Datenbank: SQL SERVER 2005 • Zugriff über: Management Studio
Hallo,

ich habe ein großes Performance Problem


Also folgendes: Ich möchte sehr sehr sehr viele Datensätze aus einen Excel in eine SQL Tabele übertragen.
Das ganze funktioniert schon recht gut (und schnell).

Das Problem ist jetzt, das viele dieser Datensätze falsch sind und auf richtigkeit überprüft werden müssen.

Ein Beispiel wäre, das ich alle Datensätze die ein NULL Element enthalten rauswerfen muss, oder
das bestimmte Datensätze überprüft werden müssen, ob keine Buchstaben drin vorkommen, etc.

Was auch wichtig ist, das, sobald ein Fehler in den Daten auftritt, dass das insert sofort mit einer Fehlermeldung abbricht.

Ich habe das ganze mit einen Update Trigger so gelößt:

SQL-Code:
ALTER TRIGGER [dbo].[dbo.tr_t_xl_costcenter_cost_upd] on [dbo].[t_xl_costcenter_cost]
AFTER INSERT NOT FOR REPLICATION
AS
BEGIN
   
   SET NOCOUNT ON
   
   DECLARE @Error_Message nvarchar(500)

   SET @Error_Message = NULL
   
   -- delete NULL Elements
   Delete
   from dbo.t_xl_costcenter_cost
   where
   KST + IAS10 + MO + AMOUNT is NULL

   -- check if KST is nummeric
   if (select KST from dbo.t_xl_costcenter_cost where isnumeric(KST)=0) is not Null
   SET @Error_Message='The KST ''' + (select KST from dbo.t_xl_costcenter_cost where isnumeric(KST)=0) + ''' is not valid!'
   

        -- [..] noch ca. 10 weitere fehlerüberprüfungen

   -- prepare error message
   SET @Error_Message =   CHAR(10)+ CHAR(10) + N'---------------------------' + CHAR(10) +
                     'IMPORT ERROR' + CHAR(10) + @Error_Message +
                     CHAR(10) + N'---------------------------' + CHAR(10) + CHAR(10)          

   -- throw error
   if @Error_Message is not NULL
   RAISERROR (@Error_Message, 11, 1)

END
Jedesmal wenn ein neuer Datensatz eingefügt wird, wird dieser validiert, wenn er falsch ist, bekommt der User eine Fehlermeldung um die Ohren.

Das Problem ist, das aber bei meiner Variante jedesmal ALLE Datensätze in der Datenbank Validiert werden.
Es kann aber immer nur der neueste falsch sein. Ich glaube daher braucht der SQL Server so lange.
(Wenn ich die Fehlerüberprüfungen raus nehme braucht er ca. 2 min, mit Fehlerüberprüfung 30min!)

Kennt jemand eine Methode, wie ich nur den aktuellen Datensatz prüfen kann (mit updated?!) und diesen Datensatz in die Tabelle aufnehme,
wenn er valide ist, ansosnten einen Error auslöse?


Mir fällt irgendwie nichts ein
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz