Вместо enter code here
«занято» атрибута, почему бы просто не добавить обнуляемый OrderId в таблицу токенов.Это выполняет ваши цели только с одним атрибутом столбца.
Update Tokens SET
Orderid = @orderId
Where tokenId = (Select Min(TokenId)
From Tokens
Where Orderid is Null)
РЕДАКТИРОВАТЬ: добавлена схема для иллюстрации отношения один к нулю или одного
Tokens
TokenId integer non-null PK
... other attributes
enter code here
Orders
OrderId Integer Non-Null PK, FK to Tokens.TokenId
... other attributes
Теперь все, что вам нужно сделать, это использовать доступный идентификатор токена из таблицы токенов при созданииновая запись заказов.
Insert Orders (OrderId, [Other attributes])
Select Min(TokenId), [Other values]
From Tokens t
Where Not Exists
(Select * From Orders
Where OrderId = t.TokenId)