norwegen60
Benutzer
- Beiträge
- 12
Hallo zusammen,
ich habe eine Tabelle, in der viele Messwerte in einem Memo abgespeichert wurde. Diese Memodaten möchte ich per folgendem SQL in eine "saubere" Tabelle aufsplitten, in der jeder Messwert in einem eigenen Feld liegt
Problem ist, das die Tabelle mehrere tausend Sätze enthalten kann und in dem Memo noch mal mehrere tausend Einzelwerte liegen können. Das würde bedeuten, dass mit dem Insert auf einmal mehrere Mio. Datensätze eingefügt würden.
Mit folgendem Ansatz könnte ich das jetzt in kleinere Schritte aufsplitten.
Wie aber kann ich das so automatisieren, dass ich nicht bis zur höchsten RelDataSet Einzelschritte programmieren muss. Am liebsten wäre mir, dass ich zuerst über (RelDataSet max /Schrittweite) die Anzahl der SQL-Schritte festlege und die dann über eine Schleife automatisch durchlaufe.
Oder hat jemand noch einen besseren Ansatz?
Vielen Dank
Gerd
ich habe eine Tabelle, in der viele Messwerte in einem Memo abgespeichert wurde. Diese Memodaten möchte ich per folgendem SQL in eine "saubere" Tabelle aufsplitten, in der jeder Messwert in einem eigenen Feld liegt
Code:
insert into zzRunProtocol (RelDataSet, [Type], ValueGes, TimePoint, Value)
select RelDataSet, [Type], SUBSTRING(Memo1, Number+1, 30) as [Value],
SUBSTRING(Memo1, Number+1, CHARINDEX(',', SUBSTRING(Memo1, Number+1, 30))-1),
SUBSTRING(Memo1, Number+CHARINDEX(',', SUBSTRING(Memo1, Number+1, 30))+1, CHARINDEX(';', SUBSTRING(Memo1, Number+1, 30)) - CHARINDEX(',', SUBSTRING(Memo, Number+1, 30))-2)
from MemoStore
join zzNumbers on (number <= LEN(Memo1)) and (SUBSTRING(Memo1, Number, 1) = ';') and (len(SUBSTRING(Memo1, Number+1, 30))>3)
Mit folgendem Ansatz könnte ich das jetzt in kleinere Schritte aufsplitten.
Code:
BEGIN TRANSACTION
-- Messwerte aus der bestehenden Tabelle MemoStore auslesen, in Einzelwerte extrahieren und in zzRunProtocol speichern
insert into zzRunProtocol (RelDataSet, [Type], ValueGes, TimePoint, Value)
select RelDataSet, [Type], SUBSTRING(Memo1, Number+1, 30) as [Value],
SUBSTRING(Memo1, Number+1, CHARINDEX(',', SUBSTRING(Memo1, Number+1, 30))-1),
SUBSTRING(Memo1, Number+CHARINDEX(',', SUBSTRING(Memo1, Number+1, 30))+1, CHARINDEX(';', SUBSTRING(Memo1, Number+1, 30)) - CHARINDEX(',', SUBSTRING(Memo, Number+1, 30))-2)
from MemoStore
join zzNumbers on (number <= LEN(Memo1)) and (SUBSTRING(Memo1, Number, 1) = ';') and (len(SUBSTRING(Memo1, Number+1, 30))>3)
where RelDataSet between 1 and 300
COMMIT
BEGIN TRANSACTION
-- Messwerte aus der bestehenden Tabelle MemoStore auslesen, in Einzelwerte extrahieren und in zzRunProtocol speichern
insert into zzRunProtocol (RelDataSet, [Type], ValueGes, TimePoint, Value)
select RelDataSet, [Type], SUBSTRING(Memo1, Number+1, 30) as [Value],
SUBSTRING(Memo1, Number+1, CHARINDEX(',', SUBSTRING(Memo1, Number+1, 30))-1),
SUBSTRING(Memo1, Number+CHARINDEX(',', SUBSTRING(Memo1, Number+1, 30))+1, CHARINDEX(';', SUBSTRING(Memo1, Number+1, 30)) - CHARINDEX(',', SUBSTRING(Memo, Number+1, 30))-2)
from MemoStore
join zzNumbers on (number <= LEN(Memo1)) and (SUBSTRING(Memo1, Number, 1) = ';') and (len(SUBSTRING(Memo1, Number+1, 30))>3)
where RelDataSet between 301 and 600
COMMIT
...
Oder hat jemand noch einen besseren Ansatz?
Vielen Dank
Gerd