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

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
Seite 1 von 2  1 2   
romber

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

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

  Alt 17. Okt 2014, 11:43
Datenbank: SQL Server • Version: 2012 • Zugriff über: ADO
Hallo!

Ich habe folgendes Problem: in einer Tabelle auf dem SQL Server werden mehrere Hundert Verträge abgelegt. Bei jeder Vertragsänderung wird ein neuer Datensätz erstellt, um Anderungen später nachvollziehen zu können. Dabei ist mir ein Fehler unterlaufen: ein bestimmtes Feld (Datum) sollte bei jeder Änderung immer gleich bleiben, wird jedoch immer mit dem aktuellen Datum überschrieben. Das muss ich jetzt korrigieren.

Ich muss jetzt bei jedem ersten Vertragsdatensatz ein Feld auslesen und diesen Feld bei jedem letzten Vertragsdatensatz mit dem ausgelesenen Wert aktualisieren.

Wie kann ich das auf einen Schlag machen, ohne jeden Vertrag nacheinander zu ändern?

Danke!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 17. Okt 2014, 11:47
Wie hat man das letzter Vertragsdatensatz zu verstehen? Sind das Einträge mit einem gleichen Ordungskriterium (z.B. FK)? Per Versionsnnummer oder neuestes Datum?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

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

  Alt 17. Okt 2014, 11:53
Wenn dieses Feld immer gleich bleiben soll/muss, dann musst du doch den Wert in allen nachfolgenden Sätzen ändern und nicht nur im letzten, oder?

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)
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.164 Beiträge
 
Delphi 10 Seattle Professional
 
#4

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

  Alt 17. Okt 2014, 11:54
Wie hat man das letzter Vertragsdatensatz zu verstehen? Sind das Einträge mit einem gleichen Ordungskriterium (z.B. FK)? Per Versionsnnummer oder neuestes Datum?
Mit dem ersten Vertragsdatensatz ist der allerersten Datensatz eines Vertrags gemeint. Bei jeder Änderung des Vertrags (über ein selbst programmieres Tool), z.B. Verlängerung oder Kennwort-Änderung, wird nicht der ursprüngliche Datensatz aktualisiert, sondern einen neuen erstellt mit den aktuellsten Informationen. Das ist dann der letzte Vertragsdatensatz.
  Mit Zitat antworten Zitat
romber

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

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

  Alt 17. Okt 2014, 11:56
Wenn dieses Feld immer gleich bleiben soll/muss, dann musst du doch den Wert in allen nachfolgenden Sätzen ändern und nicht nur im letzten, oder?
Könnte man machen, muss aber nicht unbedingt sein. Die Änderung im letzten Datensatzt reicht, denn es wird bei einer Änderung wird immer nur der aktuellste Vertragsdatensatz abgefragt.

Geändert von romber (17. Okt 2014 um 12:01 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 17. Okt 2014, 11:56
Das war der Teil, der mir klar war, aber meine Frage bezog sich darauf, wie man zusammenhängende erkennt und wie man den letzten erkennen kann.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

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

  Alt 17. Okt 2014, 11:57
Bei jeder Änderung des Vertrags (über ein selbst programmieres Tool), ... wird nicht der ursprüngliche Datensatz aktualisiert, sondern einen neuen erstellt mit den aktuellsten Informationen.
Was für ein Tool hast du dir denn gebaut? Das mache ich auf dem MS-SQL mit INSTEAD OF Triggern
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.164 Beiträge
 
Delphi 10 Seattle Professional
 
#8

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

  Alt 17. Okt 2014, 12:01
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.

Was für ein Tool hast du dir denn gebaut?
Ein kleines Tool für die Vertragsverwaltung, nichts besonderes.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

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

  Alt 17. Okt 2014, 12: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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

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

  Alt 17. Okt 2014, 12:12
Kenne mich mit MSSQL nicht so aus, aber so ähnlich sollte es funktionieren
update <tabelle> t set t.v_from = (select top 1 v_from from <Tabelle> where v.nr = t.v_nr order by v_id); Ich setzte alle nicht nur den letzten Satz neu
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz