【发布时间】:2014-03-18 06:08:03
【问题描述】:
这几天一直困扰着我,我有一个自动增量的表,我想要的是增量值的值将插入同一行。问题是并发用户访问查询时,不会复制正确的值。
下面是我的桌子:
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
我想要实现的是我可以像下面的示例那样进行分组交易。问题是我上面的查询没有所有权。假设 userA 和 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() 是否可以解决问题?我怀疑它会
-
是的,抱歉 dcTransNoCopy 是 CloneTransNo 而 dcTransNo 只是 TransNo。
-
您向我们展示的代码
SET dcTransNoCopy = @identity WHERE dcTransNo = @identity永远不会导致4,3。两列将始终具有相同的值。 -
嗨,马丁,这实际上发生在我身边,几天来一直让我发疯。
-
嗯,这不是您向我们展示的代码。这永远不能对
dcTransNoCopy与dcTransNo具有不同的值负责。您还没有向我们展示此内容。
标签: sql sql-server