Как уже упоминалось, вы используете транзакцию и ее состояние изоляции для управления грязными считываниями.Я рекомендую против этого, так как это означает, что вы можете прочитать незафиксированную транзакцию, которая может завершиться неудачей, что может привести к гонкам, которые трудно отследить.
Также, поскольку вы делаете больше одной модификации данных, вам, вероятно, следует явно откатитьвернуть вашу транзакцию.Наконец ваш SQL необходимо исправить.Использование предложения вывода, вероятно, является хорошей идеей.
BEGIN TRANSACTION;
BEGIN TRY
DECLARE @Item table (item_no int )
DECLARE @part table (part_no int)
UPDATE TOP 1 ITEMS
SET assigned = 1
WHERE
item_code = @item_code
AND store_id = @store_id
OUTPUT
inserted.item_no
INTO @Item
UPDATE TOP 1 parts
SET issued = 1
OUTPUT
inserted.part_no
INTO @part
INSERT INTO issued_hardware
SELECT item_no, GetDate(), @UserName
FROM @item, @part;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
GO