This answers the request for concurrency and gap-free unless rollback, which I don't think will ever be necessary assuming the row in the table holding the counter exists. In this example, XASYS6 is the table, COMPANY_NUMBER_ID is the inique key column and NEXT_AVAIL_SOLD_TO_CUSTOMER_NO is the counter.
This is Db2 for i SQL PL, but it should be 100% compatible.
IN @PARMORIG_COMPANY_NUMBER_ID DECIMAL(3,0),
OUT @NEXTAVAILABLESOLDTOCUSTID DECIMAL(10,0)
SELECT NEXT_AVAIL_SOLD_TO_CUSTOMER_NO INTO @NEXTAVAILWORKVAR10 FROM XASYS6 WHERE ( ( @PARMORIG_COMPANY_NUMBER_ID = COMPANY_NUMBER_ID ) ) WITH RS ;
UPDATE XASYS6 SET NEXT_AVAIL_SOLD_TO_CUSTOMER_NO = @NEXTAVAILWORKVAR10 + 1 WHERE ( ( @PARMORIG_COMPANY_NUMBER_ID = COMPANY_NUMBER_ID ) ) ;
SET @NEXTAVAILABLESOLDTOCUSTID = @NEXTAVAILWORKVAR10 ;