插入时获取标识值

时间:2013-11-22 09:51:56

标签: sql sql-server

我的列ID是自动增量,另一列是Request_Number

Request_Number我要插入类似"ISD0000"+ID值的内容... 例如,对于第一条记录,它应该ID 1和Request_Number“ISD000001

如何实现这一目标?

5 个答案:

答案 0 :(得分:2)

您可以使用计算列:

create table T
(
  ID int identity primary key check (ID < 1000000),
  Request_Number as 'ISD'+right('000000'+cast(ID as varchar(10)), 6)
)

也许你还需要一个检查约束,这样你就不会溢出。

答案 1 :(得分:2)

如果您的表定义已经到位,则可以更改列并添加标记为持久的Computed列:

ALTER TABLE tablename drop column Request_Number;
ALTER TABLE tablename add Request_Number as 'ISD00000' + CAST(id  AS VARCHAR(10)) PERSISTED ;

如果计算列未标记为持久化,则在创建列时不会创建它,实际上它仍在运行时计算。将列标记为持久化后,立即将其计算并存储在数据表中。

[编辑]:

ALTER TABLE tablename drop column Request_Number;
ALTER TABLE tablename add Request_Number as 'ISD' 
+right('000000'+cast(ID as varchar(10)), 6) PERSISTED ;

答案 2 :(得分:1)

您可以使用Computed column

CREATE TABLE T
(       ID INT IDENTITY(1, 1) NOT NULL,
        Request_Number AS 'ISD' + RIGHT('00000' + CAST(ID AS VARCHAR(10)), 6),
    CONSTRAINT PK_T_ID PRIMARY KEY (ID)
);

<强> Example on SQL Fiddle

答案 3 :(得分:0)

这应该有效

UPDATE dbo.TableName
SET Request_Number = 'ISD' + RIGHT('00000'+ CONVERT(VARCHAR(9),ID),6)
WHERE Request_Number IS NULL

假设您要更新此表,但可以轻松修改它以进行触发或插入。

答案 4 :(得分:0)

select 'ISD0000'+CONVERT(varchar, IDENT_CURRENT('Tablename'))