Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Datensätze in einer Datenbank durchnummerieren (https://www.delphipraxis.net/214092-datensaetze-einer-datenbank-durchnummerieren.html)

bernhard_LA 13. Nov 2023 13:38

Datenbank: MSSQL • Version: 12 • Zugriff über: ADO

Datensätze in einer Datenbank durchnummerieren
 
ich suche eine Funktion, Stored procedure etc. welche mir in einem leeren Feld meiner Datenbank-Tabelle "
Delphi-Quellcode:
RecordID
" von 0 beginnend alle meine Dätensätze durchnummeriert.

fisipjm 13. Nov 2023 13:43

AW: Datensätze in einer Datenbank durchnummerieren
 
Du meinst sowas wie

Code:
select ROW_NUMBER() Over(order by <Feldname>) as Row, * from <Tabelle>
edit: Null variante wäre dann:
Code:
select ROW_NUMBER() Over(order by <Feldname>) -1 as Row, * from <Tabelle>

himitsu 13. Nov 2023 13:48

AW: Datensätze in einer Datenbank durchnummerieren
 
Als Feld in der Tabelle -> z.B. eine StoredProc/Trigger, welche das schreibt (aus einer SEQUENZ oder MAX+1 abfragen),
aber die SEQUENZ wohl eher als DEFAULT am Feld definiert.

ansonsten gibt es, wie auch in vielen anderen DBMS, eine WindowFunction ROW_NUMBER()
https://learn.microsoft.com/en-us/sq...l-server-ver16

Delphi.Narium 13. Nov 2023 16:32

AW: Datensätze in einer Datenbank durchnummerieren
 
Zitat:

Zitat von bernhard_LA (Beitrag 1529617)
ich suche eine Funktion, Stored procedure etc. welche mir in einem leeren Feld meiner Datenbank-Tabelle "
Delphi-Quellcode:
RecordID
" von 0 beginnend alle meine Dätensätze durchnummeriert.

Was genau ist gemeint:

Bei der Ausgabe für eine fortlaufende Nummer im Ergebnis sorgen?

Oder:

In der Datenbank das Feld RecordID automatisch beim Einfügen eines Datensatzes mit dem nächsten Wert für die fortlaufende Nummer befüllen? Sequenz und Trigger.

Redeemer 13. Nov 2023 17:33

AW: Datensätze in einer Datenbank durchnummerieren
 
SEQUENCE? Ich würde eher IDENTITY vorschlagen.

bernhard_LA 27. Nov 2023 10:27

AW: Datensätze in einer Datenbank durchnummerieren
 
Aktuell kann ich mir alle Datensätze holen und das Feld Row# hinzufügen mit diesem SQL Statement:


Delphi-Quellcode:

  SELECT
  ROW_NUMBER() OVER(ORDER BY MYID ASC) AS Row#,
  GlobalID,MYID,Name
FROM dbo.MeinTabellenName where GlobalID=''
dh. ich müsse im nächsten Schritt eine Query erzeugen und dann Row# in mein Feld GlobalID kopieren, der Delphi-Code sollte kein Problem sein.
Viel lieber würde ich gleich das Feld GlobalID aktualieren mit diesem SQL Ansatz



Delphi-Quellcode:

update dbo.MeinTabellenName SET GlobalID=ROW_NUMBER() OVER(ORDER BY MYID ASC)

hier bekomme ich jetzt diesen Fehler :



Msg 4108, Level 15, State 1, Line 1
Windowed functions can only appear in the SELECT or ORDER BY clauses.

Completion time: 2023-11-27T11:19:55.9818353+01:00





gibt es eine einfache Lösung für mein Problem?

stifflersmom 27. Nov 2023 10:41

AW: Datensätze in einer Datenbank durchnummerieren
 
Vielleicht mit 'nem Subquery?

Code:
  update dbo.MeinTabellenName t1, (  SELECT
  ROW_NUMBER() OVER(ORDER BY MYID ASC) AS Row#,
  GlobalID,MYID,Name FROM dbo.MeinTabellenName where GlobalID=''
) t2
set t1.RowNumber=t2.Row# where t1.MYID=t2.MYID

Jasocul 27. Nov 2023 10:42

AW: Datensätze in einer Datenbank durchnummerieren
 
Zitat:

Zitat von bernhard_LA (Beitrag 1530110)
gibt es eine einfache Lösung für mein Problem?

Einfach ist immer Ansichtssache.
Wie wäre es mit einer Stored Procedure mit einer Cursor-Loop für die Abfrage mit der Row_Number.
In der Loop ein passendes Update-Statement einbauen und dann sollte es meiner Meinung nach funktionieren

Uwe Raabe 27. Nov 2023 11:39

AW: Datensätze in einer Datenbank durchnummerieren
 
Zitat:

Zitat von bernhard_LA (Beitrag 1529617)
welche mir in einem leeren Feld meiner Datenbank-Tabelle "
Delphi-Quellcode:
RecordID
" von 0 beginnend alle meine Dätensätze durchnummeriert.

Falls es das Feld noch nicht gibt sollte dies das gewünschte Ergebnis bringen:
SQL-Code:
ALTER TABLE dbo.MeinTabellenName
ADD RecordID INT IDENTITY(0, 1);
Wenn das Feld schon existiert musst du es halt erst löschen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 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