AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Server: Mehrere Datensätze gleichzeitig vergleichen und ändern
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Server: Mehrere Datensätze gleichzeitig vergleichen und ändern

Ein Thema von romber · begonnen am 17. Okt 2014 · letzter Beitrag vom 17. Okt 2014
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: SQL Server: Mehrere Datensätze gleichzeitig vergleichen und ändern

  Alt 17. Okt 2014, 11:09
Zeig doch mal das DDL zu der Tabelle (es reichen dabei die relevanten Felder wie ID, Datum und das Feld woran man die Historie erkennen kann)
v_id - wird automatisch erhöht
v_nr - Vertragsnummer, bleibt bei jeder Änderung gleich
v_from - Vertragsdatum, wird fälschlicherweise bei jeder Änderung aktualisiert, muss jedoch immer gleich bleiben.
So solltest du jeweils den ersten Wert bekommen, den du dann in alle anderen Datensätze reinpassten musst
SQL-Code:
SELECT v_id, v_nr, v_from
FROM vertrag
WHERE (v_nr, v_id) IN ( SELECT v_nr, MIN( v_id ) FROM vertrag GROUP BY v_nr )
Was für ein Tool hast du dir denn gebaut?
Ein kleines Tool für die Vertragsverwaltung, nichts besonderes.
Ähm ja, aber wozu war das nötig, eigentlich macht man sich dafür eine View, die nur die aktuellen Einträge zeigt und schreibst deine Änderungen (UPDATE, DELETE, INSERT) in diese View. Die INSTEAD OF Trigger kümmern sich dann um diese historische Protokollierung. Ein Tool wird dafür nicht benötigt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.167 Beiträge
 
Delphi 10 Seattle Professional
 
#2

AW: SQL Server: Mehrere Datensätze gleichzeitig vergleichen und ändern

  Alt 17. Okt 2014, 11:16
So solltest du jeweils den ersten Wert bekommen, den du dann in alle anderen Datensätze reinpassten musst
SQL-Code:
SELECT v_id, v_nr, v_from
FROM vertrag
WHERE (v_nr, v_id) IN ( SELECT v_nr, MIN( v_id ) FROM vertrag GROUP BY v_nr )
Wie ich das für jeden Vertrag einzeln mache, ist mur klar, mich würde interessieren, ob uns wie ich das mit einer Script für alle Verträge gleichzeitig erledigen kann.

Ähm ja, aber wozu war das nötig, eigentlich macht man sich dafür eine View, die nur die aktuellen Einträge zeigt und schreibst deine Änderungen (UPDATE, DELETE, INSERT) in diese View. Die INSTEAD OF Trigger kümmern sich dann um diese historische Protokollierung. Ein Tool wird dafür nicht benötigt.
Das Tool ist nicht nur dafür da, es gibt noch jede Menge andere Aufgaben, die vom Tool erledigt werden.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: SQL Server: Mehrere Datensätze gleichzeitig vergleichen und ändern

  Alt 17. Okt 2014, 11:43
So solltest du jeweils den ersten Wert bekommen, den du dann in alle anderen Datensätze reinpassten musst
SQL-Code:
SELECT v_id, v_nr, v_from
FROM vertrag
WHERE (v_nr, v_id) IN ( SELECT v_nr, MIN( v_id ) FROM vertrag GROUP BY v_nr )
Seit wann geht das denn? Ich meine ein 'IN' mit einem 2-Tupel?

PS: Das könnte so gehen (ungetestet)
SQL-Code:
Update T
  set Datum = M.minDatum

from Vertraege T
join (
  select v_id, v_datum
    from Vertraege v
         join (select v_id, min (v_nr) as minNr from Vertraege) m
           on v.v_id=m.v_id and v_nr = m.minNr
  ) s
  on T.v_id = s.v_id
Das innerste Select 'm' erstellt für alle v_id die kleineste v_nr (als minNr)
Das wird dann mit den Verträgen verknüpft, um für jede v_id das Datum der kleinsten v_nr zu bekommen (s)
Und das wird dann als Quelle für das Update verwenden

Müsste funzen

Geändert von Dejan Vu (17. Okt 2014 um 11:52 Uhr)
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.167 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: SQL Server: Mehrere Datensätze gleichzeitig vergleichen und ändern

  Alt 17. Okt 2014, 16:41
Vielen Dank, jetzt klapt es!
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:59 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-2025 by Thomas Breitkreuz