我需要增加一个名为Sequencia的列,每个Sequencia依赖于CedenteID,Ano和Periodo递增。这就是我使用的:
buf
但是,如果我同时执行它,这段代码允许我有重复的Sequencia。我想建议我应该做什么,而不是使用更新+1
我有什么:
char ses[8]; ltoa(s_id,ses,10)
如果符合以下条件我需要:
select @Seq = isnull(Sequencia, 0) + 1
from T041_NossoNumero
where CedenteID = @CedenteID
and Ano = @Ano
and Periodo = @Periodo
update T041_NossoNumero
set Sequencia = @Seq
where CedenteID = @CedenteID
and Ano = @Ano
and Periodo = @Periodo
答案 0 :(得分:0)
自动"的唯一方法。按设计增加一列是使用这样的身份。
CREATE TABLE dbo.Table_1
(
sequence int NOT NULL IDENTITY (1, 1)
) ON [PRIMARY]
但是这对你不起作用,因为只有当所有其他字段都相同时才需要增加。
这意味着增量必须在应用程序端完成。
确保你使用执行此操作的单个事务,因为否则可能会出现同步问题。
答案 1 :(得分:0)
通过使用事务,您可以确保在并发调用中不会出现重复,但这可能会导致系统出现性能问题。
BEGIN TRY
BEGIN TRANSACTION
select @Seq = isnull(Sequencia, 0) + 1
from T041_NossoNumero
where CedenteID = @CedenteID
and Ano = @Ano
and Periodo = @Periodo
update T041_NossoNumero
set Sequencia = @Seq
where CedenteID = @CedenteID
and Ano = @Ano
and Periodo = @Periodo
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
THROW
END CATCH
答案 2 :(得分:0)
我可能遗漏了一些东西,但是你无法使用
UPDATE T041_NossoNumero
set Sequencia = isnull(Sequencia, 0) + 1
where CedenteID = @CedenteID
and Ano = @Ano
and Periodo = @Periodo