Ich habe ein etwas hässliches Problem der Umgang mit einer vorhandenen Datenbank. Diese Datenbank eine Transaction_Items
Tabelle hat, die die Positionen für jede Transaktion enthält (vereinfacht):"Einfügen" neue Zeile mit der niedrigsten Identität in SQL Server
Transaction_Item_ID(Identity - Auto) Transaction_ID Item_Name
-----------------------------------------------------------------
1 12345 Service1
2 12345 Service2
3 12345 Service3
4 12346 Service1
Diese Transaktionen zeigen auf einer Rechnung und die Anwendung immer Aufträge sie auf dieser Rechnung auf der Grundlage der Transaction_Item_ID
.
Ich muss einen Service-Artikel zu bestimmten Transaktionen hinzufügen, die immer zuerst erscheinen, nennen wir den Artikel MEMO
Name. Andernfalls müssen die Elemente in der gleichen Reihenfolge bleiben. Daher muss dieser MEMO
Artikel immer den niedrigsten Transaction_Item_ID
von denen haben, die der Transaktion entsprechen. Weil Transaction_Item_ID
eine Autoidentitätsspalte ist, kann ich das nicht einfach auf einen niedrigeren Wert ändern. Ich denke, ich muss im Grunde die Item_name
der ersten Zeile auf MEMO
aktualisieren, während Sie den vorhandenen Elementnamen in die nächstniedrigere Zeile usw. kopieren, bis der vorherige letzte Zeilenwert in eine neue Zeile eingefügt wird.
Die Frage ist, wie man das macht oder ob es einen besseren Weg gibt, das gleiche Ergebnis zu erzielen.
im Grunde wie folgt endet:
Transaction_Item_ID(Identity - Auto) Transaction_ID Item_Name
-----------------------------------------------------------------
1 12345 MEMO
2 12345 Service1
3 12345 Service2
4 12346 Service1
5 12345 Service3
EDIT Zur Klarstellung: Ich habe keinen Zugriff auf die Anwendung zu ändern, die sonst in dieser Tabelle verwendet. Ich kann der Tabelle keine neue Spalte hinzufügen.
Ich weiß, dass der Identity-Wert nicht geändert werden kann/sollte, da dies eine Unordnung verursachen würde. Deshalb nehme ich an, dass die einzige Antwort darin besteht, den Wert des Elementnamens "nach unten" in die Zeilen zu verschieben.
Ja, das ist hässlich und alles andere als ideal. Leider ist es in vielen Unternehmen Realität, mit Legacy-Anwendungen umzugehen und das Beste daraus zu machen. Zumindest habe ich tatsächlich Lese-/Schreibzugriff auf die Datenbank.
Dies ist nicht wirklich etwas, was getan werden sollte, IMO. Sie sollten die Abfrage, die Daten aus der Tabelle extrahiert, wirklich ändern, um eine benutzerdefinierte Reihenfolge nach Anweisung zu erhalten. z.B. 'order by case wenn item_name = 'memo' dann 0 else 1 end, transaction_item_id' – ZLK
Warum fügst du das nicht mit einem Wert von -1 für die' transaction_item_id' ein? –
Sie können ** keinen vorhandenen Wert in einer Identitätsspalte aktualisieren. SQL Server ermöglicht Ihnen das Einfügen ** bestimmter benutzerdefinierter Werte mit dem Befehl SET IDENTITY_INSERT ON, aber Sie können ** nie ** ein Update durchführen vorhandener Wert der Spalte "identity". –