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