У меня есть две таблицы - «СДАНО» и «ИСТОРИЯ». После возврата элемента мне нужно переместить его в таблицу «ИСТОРИЯ», используя процедуру. Таблицы одинаковы во всех отношениях. Первичный ключ - это просто число, но НЕ автоинкремент. Когда я пытаюсь переместить строку из Rented to History, я получаю столкновение, потому что первичные ключи имеют номер 2 для идентификационного номера. Я знаю, что мне просто нужно найти максимальное значение первичного ключа в таблице HISTORY, а затем добавить строку после. Казалось, что это сложно сделать. Наконец, я удаляю строку из таблицы RENTED, которую я могу сделать. Пожалуйста, помогите мне с движением ряда. Благодаря!SQL Moving Row to Identical Table БЕЗ автоинкремента (SQL Server 2008)
Кроме того, я рассмотрел некоторые другие аналогичные примеры кода/ответы здесь, но еще не нашел решения.
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
Таким образом, в этой процедуре, я просто хочу, чтобы ввести номер 2 и взять 2 записи в таблице Сдан и перейти к следующей строке таблицы истории. Ниже для лучшей визуализации таблиц (несколько столбцов опущенных)
**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
Это не возможно, если вы поддерживаете столбец HISTORY_NUM в истории таблицы в качестве первичного ключа –
создать новый автоматический инкрементируются столбец в таблице истории, которая будет выступать в качестве первичного ключа и удалить атрибут первичного ключа from HISTORY_NUM column –
@mudassirhasan Это не может быть прав. Все, что мне нужно сделать, это найти MAX (HISTORY_NUM) и увеличить его на 1, а затем поместить данные в эту строку? – FoxDonut