【发布时间】:2019-12-17 12:59:58
【问题描述】:
我们将 PowerApps 与 Azure SQL 集成。用户提供的输入以增量行 ID 存储在 Azure SQL 中。请求 ID 递增操作在存储过程中处理。但是,如果多个用户同时添加内容,则所有请求都使用相同的请求 ID 保存。由于依赖关系,我们不能强制请求 ID 列是唯一的。
请建议我们是否可以在此处避免重复。这是 SP:
SELECT @ROWNUM = MAX(R.ROWNUM) + 1
FROM REQUESTS R
WHERE R.ABC = @XYZ
IF @ROWNUM is NULL
begin
set @ROWNUM = 1
end
-- Inserting a single new request into request table with auto generated identify
INSERT INTO REQUESTS
(
Column1,
……
Columnn
)
谢谢!
【问题讨论】:
-
一种方法是在同一个可序列化事务中执行 SELECT 和 INSERT。考虑增加死锁的可能性。
-
这不是一个自动递增的列。这是手动递增的 MAX+1,即使只有两个命令在 本地 服务器上同时运行,也容易出现重复。请改用
IDENTITY或 SEQUENCE。如果要返回新 ID,请使用INSERT中的OUTPUT子句 -
即使使用 one 用户也容易出现重复 - 如果您删除最新的行,此查询将再次生成相同的 ID。如果这些值在其他表中使用,例如作为查找键,它们最终会在不相关的行之间创建虚假关系
-
@PanagiotisKanavos 问题是 Rownum 不能更改为身份...rownum 是请求 ID ..我有一个叫做检查的东西(如果你愿意的话,一个父级),每个检查可以有多个请求。 .在每次检查中,requestID 必须从 1 开始并递增。有什么建议吗?
-
the requestID has to start at 1 and get incremented.这意味着它不是一个ID,只是一个计数器?即使它是一个业务字段,例如发票编号或订单中的行项目,它仍然是一个计数器。您可以去掉该列并在查询时计算ROW_NUMBER(),按行的键排序。
标签: sql sql-server azure-sql-server