Sql server 如何仅当id值在表中是新的时自动递增id值。也就是说,我只希望重复记录列自动递增

Sql server 如何仅当id值在表中是新的时自动递增id值。也就是说,我只希望重复记录列自动递增,sql-server,Sql Server,请检查下图中的表格: 因此,我只希望在遇到重复值时使用递增值,即sru8888。这给了我sru88881和sru88881。但sru777979的增量值与sru7779793的增量值相同。 我希望这个数字从1递增。因此,希望o/p值为sru7779791 我的当前表和存储过程如下所示: CREATE TABLE [dbo].[Test1] ( [IncidentNumber] [varchar](50) NOT NULL, [ID] [int] IDENTITY NOT NUL

请检查下图中的表格:

因此,我只希望在遇到重复值时使用递增值,即sru8888。这给了我sru88881和sru88881。但sru777979的增量值与sru7779793的增量值相同。 我希望这个数字从1递增。因此,希望o/p值为sru7779791

我的当前表和存储过程如下所示:

CREATE TABLE [dbo].[Test1]
(
    [IncidentNumber] [varchar](50) NOT NULL,
    [ID] [int] IDENTITY NOT NULL, 
    [JournalEntryNumber] as IncidentNumber + Cast(ID as Varchar(10)) PERSISTED PRIMARY KEY,
    [JournalType] [nvarchar](max) NULL,
    [JournalDescription] [nvarchar](max) NULL
)

CREATE PROCEDURE [dbo].[sp_JournalCreated]
       @IncidentNumber VARCHAR(50), 
       @JournalType nvarchar(max) = NULL, 
       @JournalDescription nvarchar(max) = NULL
AS
BEGIN 
    INSERT INTO [dbo].[Test1](IncidentNumber, JournalType, JournalDescription) 
    VALUES (@IncidentNumber, @JournalType, @JournalDescription) 
END
GO

在这种情况下,您不能使用
标识
类型。您需要编写一个执行序列逻辑的插入触发器

不太清楚您在问什么,请尝试使用当前数据集和预期输出解释问题。您说要将值递增1如何从值
sru777979
sru77793
中获取值
sru77791
。这似乎是一个非常脆弱的键结构。当您遇到重复值时会发生什么情况,因为您已经有一个IncidentNumber值,这将导致冲突?让主键派生的值很容易产生重复的值几乎总是一个坏主意。旁注:不应该在存储过程中使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀!我同意@SeanLange的观点,这个结构暗示了通过使用一个事件表来更好地服务,该表是Test1的外键引用,它可能被命名为更好的名称,比如IncidentEntry。我认为IncidentNumber中没有一个自然键值是varchar,所以不管怎样,列都应该是数字的,至少它与其他一些明显的实体(也称为事件)的关系是这样的但是,我想知道是否采取了这条路线,这只是启用了一个糟糕的设计,还是修复了这个奇怪的varchar+int主节点的潜在结构问题key@hubsonbropa这对这里的许多问题都是正确的。与其回答问题本身,不如问它的基本思想是什么,如何才能更好地设计它?