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,不确定为什么需要保存它,它的冗余
我是初学者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,不确定为什么需要保存它,它的冗余