У меня есть страница ввода продукта, и мы продолжаем добавлять записи о продуктах в нашу базу данных.
В зависимости от местоположения продукта существует 2 серии. например, ABCTMP
(серия (1-max)) и XYZ
(серия (1-max)).
Таблица имеет ограничение первичного ключа, которое представляет собой комбинацию из 4 столбцов. Из 4 только одна вызывает проблему, в то время как комбинация последовательных приращений является разумной.
В этом первом столбце указан код продукта с указанием местоположения, как указано выше, и он имеет тип данных char(20)
, поскольку в нем хранятся значения, такие как ABCTMP01
и через классический код asp. Мы увеличиваем это последнее 01
значение, добавляя единицу к существующему значению.
Прямо сейчас возникает проблема, когда последнее значение достигает 99
и превращается в 100
. Он генерирует код 100 с помощью кода, но не может быть вставлен в базу данных и выдает эту ошибку, которая произошла из-за существующей записи в базе данных.
Повторяющаяся ключевая часть та же самая, о которой я упоминал выше в теме / заголовке. Если я удаляю запись из таблицы записей, то нет. 100, чтобы проверить, это дает мне правильную запись 99 через вышеупомянутый запрос и через вышеупомянутый классический код asp, это генерирует следующий код как 99 + 1 = 100.
Но когда я снова пытаюсь добавить следующую серию записей для 101, даже через SQL mgt studio, это выдает мне ошибку ниже.
Нарушение ограничения PRIMARY KEY 'PK'. Невозможно вставить дубликат ключа в объект 'prdct_mst_tab'. Значение дублированного ключа (PWATERTMP100, 006, Y, 01). Заявление было прекращено.
Попытался сбросить ограничение и изменить размер типа данных char(20)
на char(30)
, так как существуют зависимости от таблицы. Но не сработало. Затем попытались изменить тип данных с char(30)
на varchar(30)
, все еще не работает. Затем снова попробовал вручную
выполнение команды вставки
в самом SQL, но такая же ошибка произошла для 101-й записи.
Перед генерацией следующей серии есть оператор выбора для проверки последней вставленной записи, которая будет увеличена позже.
Для создания следующей записи из 101 оператор SELECT должен показывать последнюю вставленную запись из 100, но он по-прежнему дает 99-ю запись, и код снова генерируется как 100, и ошибка повторяется. Я не понимаю, почему он не берет сотую запись, когда я выполняю оператор SELECt в SQL mgt studio. Тип данных этого столбца PWATERTMP100 - char (20).
Ниже мой классический asp-код для генерации серий и SQL-оператор SELECT top 1 * для подсчета записей для продукта с определением местоположения.
select top 1 *
from prdct_mst_tab
where pmt_prdct_cd like 'PWATER%'
and pmt_umt_unit_cd='006'
AND PMT_CMT_CMPNY_CD='01'
order by pmt_prdct_cd desc
Классический код ASP: -
If recordset.eof Then
getcode="ABCTMP01"
Else
getcode = clng(Mid(recordset("Column1"),10,20))
response.write("Hello" & getcode)
getcode = getcode +1
response.write("<br />Hello" & getcode)
getcode = "ABCTMP" & getcode
response.write("<br />Hello" & getcode)
End if
Ниже для добавления сгенерированного кода продукта в таблицу базы данных.
Sql как показано ниже
select * from Table1
recordset.open sql,con,3,2
recordset.addnew
recordset("Column1")=getcode
recordset.update
recordset.close
Примечание: приведенные выше значения являются примерами.
Я хочу, чтобы запись вставлялась даже тогда, когда она меняется с 99
на 100
, означает, что код станет ABCTMP99
- ABCTMP100
и продолжится с series
, начиная с диапазона 100
(3 цифры), например 100, 101, 102 ....