SQL 服务器获取标识号并分配给另一个列值

SQL Server get Identity Number and assign to another column value

我是初学者SQL服务器学生,需要满足要求但不知道如何

对于 table Products 我有列 ProductID, ProductName, SerialNo.

SerialNo应该从1001开始递增1,同时ProductId应该从P1001开始,P1002等等...

我定义了

SerialNo INT Identity(1001, 1)

并且不知道如何获取标识值并将其附加到 'P' 并尝试使用变量但无法弄清楚

BEGIN 
    DECLARE @ProductID VARCHAR(5)
    SET @ProductID = 'P' + CAST(@@IDENTITY AS VARCHAR)
    INSERT INTO Product VALUES(@ProductID,'Nokia')
    SELECT * FROM Product
END

我得到了

ProductID       Name        SerialNo
--------------------------------------
NULL            NOKIA       1001

预期输出为

ProductID       Name        SerialNo
-------------------------------------
P1001            NOKIA       1001

我建议创建一个生成的列:

alter table product add column ProductId as concat('P', SerialNo);

这是在引用列时计算的(除非值被持久化)。

老实说,我不确定您是否真的需要这样的专栏。标识栏应该足够了。

@@IDENTITY 在会话中保留最后一个插入标识,因此它对您没有用,您有多种选择:

  • 添加一个计算列:

    alter table product add ProductId as concat('P',SerialNo)  
    
  • 使用 IDENT_CURRENT : IDENT_CURRENT 为您提供 table

    中的最后一个标识值
    INSERT INTO Product VALUES(concat('P',IDENT_CURRENT('dbo.product')+1) ,'Nokia')
    SELECT * FROM Product
    

我建议您使用计算列,但是您始终可以重现 productId,不确定为什么需要保存它,它的冗余