Ich habe zwei Tabellen - "RENTED" und "HISTORY." Sobald ein Artikel zurückgegeben wurde, muss er mithilfe einer Prozedur in die Tabelle "HISTORY" verschoben werden. Die Tabellen sind in jeder Hinsicht identisch. Der Primärschlüssel ist nur eine Zahl, wird aber NICHT automatisch inkrementiert. Wenn ich versuche, eine Zeile von "Vermietet" in "Verlauf" zu verschieben, erhalte ich einen Konflikt, weil die Primärschlüssel beide die Nummer 2 für eine ID-Nummer haben. Ich weiß, ich muss nur den Maximalwert des Primärschlüssels in der Tabelle HISTORY finden und dann die Zeile danach hinzufügen. Es schien einfach, es war schwierig zu tun. Zuletzt lösche ich die Zeile aus der VERMIETET Tabelle, die ich tun kann. Bitte helfen Sie mir bei der Zeilenbewegung. Vielen Dank!SQL Moving Row in identische Tabelle OHNE Auto-Inkrement (SQL Server 2008)
Auch hier habe ich mir ein paar andere ähnliche Codebeispiele/Antworten angeschaut, aber noch keine Lösung gefunden.
Create Procedure spMoveToHistory
@RENTED_OUT_NUM bigint
AS
Begin
Insert Into HISTORY
Select *
From RENTED_OUT
Where RENTED_OUT_NUM = @RENTED_OUT_NUM
Select @RENTED_OUT_NUM = (MAX(HISTORY_NUM)+1)
From HISTORY
Delete From RENTED
Where RENTED_OUT_NUM = @RENTED_OUT_NUM
End
So in diesem Verfahren, ich möchte nur die Nummer 2 und nehmen Sie die 2. Datensatz in der VERMIETET Tabelle eingeben und nächste verfügbare Zeile in der Geschichte Tisch rücken. Siehe unten für eine bessere Visualisierung der Tabellen (a weggelassen wenig Spalten)
**RENTED TABLE:**
RENTED_OUT_ID (PK) | ITEM_NAME | ITEM_DESC | DATE_RENTED | DATE_RETURNED
1 data data data data
2 move this data data data data
3 data data data data
**HISTORY TABLE:**
HISTORY_NUM (PK) | ITEM_NAME | ITEM_DESC | DATE_RENTED | DATE_RETURNED
1 data data data data
2 data data data data
-> INSERT HERE
Es ist nicht möglich, wenn Sie HISTORY_NUM Spalte in HISTORY Tabelle sind die Aufrechterhaltung als Primärschlüssel –
ein neues Auto erhöht Spalte in HISTORY Tabelle erstellen, die als Primärschlüssel wirken und den Primärschlüssel Attribut entfernen aus HISTORY_NUM Spalte –
@ Mudassirhasan Das kann nicht stimmen. Alles, was ich tun müsste, ist, den MAX (HISTORY_NUM) zu finden und ihn um 1 zu erhöhen, und dann die Daten in diese Zeile zu legen? – FoxDonut