Мне трудно понять, в чем проблема. Читая, мне кажется, что у вас не обязательно возникают проблемы при создании идентификаторов продаж, а скорее, при ведении одного списка продаж для клиента по сеансам / компьютерам / экземплярам / и т.д.?
Предположения:
1) что конкретный клиент может иметь только один список продаж одновременно, и
2) что ваш столбец "idclient" является идентификатором клиента, которому принадлежит этот список продаж.
Решение:
Вместо того, чтобы искать продажу, ищите idclient в таблице продажи соответствующего клиента. Если это ничего не дает, создайте новую продажу для этого клиента, а если оно вернется с продажей, используйте этот Saleid. Делайте это всякий раз, когда вам нужен этот Saleid.
Лучшее решение:
Вышеупомянутое решение позволяет вам иметь только одну продажу и, следовательно, список продаж для каждого клиента. Если вам нужно любое количество прошлых, завершенных продаж, но только один текущий, открытый, сделайте следующее:
Добавление логического столбца "isSaleCompleted" к продаже таблицы. Установите значение true только тогда, когда продажа будет завершена.
Затем в том же поиске продаж клиента, что и выше, также проверьте, что isSaleCompleted имеет значение false.
Итак, хранимая процедура поиска продажи клиента будет выглядеть так:
CREATE Procedure ClientSaleSearch
(
@clientid int
)
SELECT saleid
From Sale
WHERE id=@userid AND isSaleCompleted = '0'