sqlserver2005数据库 给表自增列如何创建带标识的自增ID
比如一个列有idnamecodecid(外键)现在如何创建这张表让iD列每次自增时前面加上BH代号因为我有四级分类表比较多所以标识不能用纯数字希望给我详细步骤谢谢BH00...
比如 一个列有id name code cid(外键) 现在如何创建这张表 让iD列每次自增时前面加上BH代号 因为我有四级分类 表比较多 所以标识不能用纯数字 希望给我详细步骤 谢谢
BH00001
BH00002
BH00003
BH00004 展开
BH00001
BH00002
BH00003
BH00004 展开
3个回答
展开全部
如果你是要在建表中就转化的话可以用楼上的就可以了,如果你要是想要基于表中建的话可以这样
create table a(id int identity primary key not null,name varchar(30))
alter table a add code varchar(30)
update a set code=b.code from a,(select id,ltrim('bh'+replace(CONVERT(varchar(30),STR(id,5,0)),' ','0'))as code from a)as b where a.id=b.id
结果:
id name code
1 张三 bh00001
2 张三 bh00002
3 张三 bh00003
4 张三 bh00004
5 张三 bh00005
6 张三 bh00006
7 张三 bh00007
8 张三 bh00008
9 张三 bh00009
10 张三 bh00010
11 张三 bh00011
12 张三 bh00012
13 张三 bh00013
14 张三 bh00014
15 张三 bh00015
16 张三 bh00016
create table a(id int identity primary key not null,name varchar(30))
alter table a add code varchar(30)
update a set code=b.code from a,(select id,ltrim('bh'+replace(CONVERT(varchar(30),STR(id,5,0)),' ','0'))as code from a)as b where a.id=b.id
结果:
id name code
1 张三 bh00001
2 张三 bh00002
3 张三 bh00003
4 张三 bh00004
5 张三 bh00005
6 张三 bh00006
7 张三 bh00007
8 张三 bh00008
9 张三 bh00009
10 张三 bh00010
11 张三 bh00011
12 张三 bh00012
13 张三 bh00013
14 张三 bh00014
15 张三 bh00015
16 张三 bh00016
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用计算列或用函数或触发器
如:
Create table test(ID int identity(1,1),Code as 'BH'+right(1000000+ID,5),Cid int)
如:
Create table test(ID int identity(1,1),Code as 'BH'+right(1000000+ID,5),Cid int)
追问
消息:只能对计算列创建 UNIQUE 或 PRIMARY KEY 约束,CHECK、FOREIGN KEY 和 NOT NULL 约束要求计算列是持久化的。---------如果想加外键的话该怎么办呢 请Microsoft的专家指导
追答
樓主的情況用自定義主健處理
舉個用觸發器的例子
Create table test(Code NVARCHAR(7) PRIMARY KEY,Cid int)
GO
-- 用触发器完成
create trigger tr_test_insert on test
instead of insert
AS
SET NOCOUNT ON ;
begin
declare @i int
select * into # from inserted
select @i = isnull ( cast(max(RIGHT(Code,5)) AS int), 100000 ) from test
update # set Code ='BH'+ right ( 100000 + rtrim ( @i ), 5 ), @i = @i + 1
insert test select * from #
end
go
-- 测试1
insert test (cid)
select 1 union all
select 2
go
SELECT * from test
/*
Code Cid
BH00001 1
BH00002 2
*/
go
-- 测试2
insert test (cid)
select 3 union all
select 4
go
SELECT * from test
go
/*
Code Cid
BH00001 1
BH00002 2
BH00003 3
BH00004 4
*/
DROP TABLE Test
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1> CREATE TABLE test1 (
2> id int identity(1,1),
3> Code as 'BH' + RIGHT('0000' + CAST(id as varchar), 5),
4> value varchar(10)
5> );
6> GO
1>
2> INSERT INTO test1 VALUES ('Test');
3> GO
(1 行受影响)
1> select * from test1
2> go
id Code value
----------- ------------ ----------
1 BH00001 Test
(1 行受影响)
用计算列来处理.
这个效果可以么?
2> id int identity(1,1),
3> Code as 'BH' + RIGHT('0000' + CAST(id as varchar), 5),
4> value varchar(10)
5> );
6> GO
1>
2> INSERT INTO test1 VALUES ('Test');
3> GO
(1 行受影响)
1> select * from test1
2> go
id Code value
----------- ------------ ----------
1 BH00001 Test
(1 行受影响)
用计算列来处理.
这个效果可以么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询