![]() |
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:
" von 0 beginnend alle meine Dätensätze durchnummeriert.
RecordID
|
AW: Datensätze in einer Datenbank durchnummerieren
Du meinst sowas wie
Code:
edit: Null variante wäre dann:
select ROW_NUMBER() Over(order by <Feldname>) as Row, * from <Tabelle>
Code:
select ROW_NUMBER() Over(order by <Feldname>) -1 as Row, * from <Tabelle>
|
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() ![]() |
AW: Datensätze in einer Datenbank durchnummerieren
Zitat:
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? ![]() ![]() |
AW: Datensätze in einer Datenbank durchnummerieren
SEQUENCE? Ich würde eher IDENTITY vorschlagen.
|
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:
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.SELECT ROW_NUMBER() OVER(ORDER BY MYID ASC) AS Row#, GlobalID,MYID,Name FROM dbo.MeinTabellenName where GlobalID='' 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? |
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 |
AW: Datensätze in einer Datenbank durchnummerieren
Zitat:
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 |
AW: Datensätze in einer Datenbank durchnummerieren
Zitat:
SQL-Code:
Wenn das Feld schon existiert musst du es halt erst löschen.
ALTER TABLE dbo.MeinTabellenName
ADD RecordID INT IDENTITY(0, 1); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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