Это беспокоило меня в течение нескольких дней, у меня есть таблица с автоматическим приращением, я хочу, чтобы значение значения приращения было вставлено в ту же строку. Проблема в том, что, когда параллельные пользователи обращаются к запросу, он не копирует правильное значение.Настройка права собственности на транзакцию SQL
Ниже мой стол:
CREATE TABLE tblTransactions
(
dctransno INT IDENTITY PRIMARY KEY,
vcDescription VARCHAR,
dcTransNoCopy INT NULL,
user VARCHAR
)
и мой запрос:
BEGIN TRAN
INSERT INTO tblTransactions
(dctransno,
user)
VALUES (@vcDescription,
@user);
SET @identity = @@IDENTITY -- get the identity
UPDATE tblTransactions
SET dcTransNoCopy = @identity
WHERE dcTransNo = @identity
AND user = @user; -- insert
COMMIT TRAN
То, что я хочу, чтобы добиться того, что я могу иметь сгруппированных сделку, как показано ниже. Например, Проблема в том, что мой вышеприведенный запрос не имеет права собственности. Предполагая, что пользователь A и userB одновременно используют систему:
dcTransNo Description dcTransNoCopy User
1 Transaction1 1 userA
2 Transaction2 1 userA
3 Transaction3 1 userA
4 Transaction1 3 userB ---> not correct, ClonetransNo value for userB should be 4 not 3.
Пожалуйста, помогите, заблаговременно.
Я предполагаю, что dcTransNoCopy является CloneTransNo и dcTransNo просто TransNo? В ваших образцовых данных и в поставляемом коде используются разные имена. Кроме того, если вы используете scope_identity(), это решает проблему? Я подозреваю, что это будет – billinkc
Да, извините dcTransNoCopy - это CloneTransNo и dcTransNo - это просто TransNo. – popoyjin
Код, который вы нам указали 'SET dcTransNoCopy = @identity WHERE dcTransNo = @ identity' никогда не может привести к' 4,3'. Оба столбца всегда будут иметь одинаковое значение. –