高手帮助....
我在创建表的时候。想让主键自动增加,自动填入。
如主键是titleID
我想让主键的值是:lik_123
lik后面的数字自动增加怎么弄。谢谢
问题点数:100、回复次数:17Top
1 楼coolingpipe(冷箫轻笛)回复于 2006-12-01 11:51:51 得分 5
写函数实现Top
2 楼tanqimin(厨师卡尔)回复于 2006-12-01 11:53:41 得分 5
这个我也想知道,帮顶!Top
3 楼xlhl(顽皮兔子)回复于 2006-12-01 11:58:23 得分 10
用计算列
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
CREATE TABLE dbo.Table1
(
id int NOT NULL IDENTITY (1, 1),
mainid AS 'lik_'+str(id)
) ON [PRIMARY]
GO
ALTER TABLE dbo.Table1 ADD CONSTRAINT
PK_Table1 PRIMARY KEY CLUSTERED
(
mainid
) ON [PRIMARY]
GO
COMMITTop
4 楼jackeyabc(过些天跟布什二女儿订婚))回复于 2006-12-01 11:58:26 得分 0
用自定义函数,先mark一下,吃饭回来帮你写~这个简单~Top
5 楼roy_88(中国风_燃烧你的激情!!!)回复于 2006-12-01 12:05:05 得分 0
用触发器可以实现/或用楼上的计算列方式
Top
6 楼qzjackie(qzjackie)回复于 2006-12-01 12:05:45 得分 0
要怎么写啊???Top
7 楼marco08(天道酬勤)回复于 2006-12-01 12:08:12 得分 5
學習Top
8 楼jackeyabc(过些天跟布什二女儿订婚))回复于 2006-12-01 12:44:52 得分 40
create function getfun()
returns varchar(20)
as
begin
declare @n varchar(20)
select @n='link_'+cast((isnull(max(id),0)+1) as varchar) from ai
return @n
end
create table ai (id int primary key default(dbo.getfun()),ii int)
你看这个应该达到你的要求了么?
Top
9 楼caixia615(*^_^*)‵My ɡīr!.ˊ想念妳ˋ 。(*^_^*)回复于 2006-12-01 12:47:07 得分 0
upTop
10 楼jackeyabc(过些天跟布什二女儿订婚))回复于 2006-12-01 12:58:50 得分 0
上面的有错,更正如下
create function dbo.getfun()
returns varchar(20)
as
begin
declare @n varchar(20)
select @n='link_'+convert(varchar(10),isnull(max(cast((right(id,len(id)-5)) as int)),0)+1) from ai
return (@n)
end
create table dbo.ai (id varchar(20) primary key default(dbo.getfun()),ii int)
Top
11 楼jackeyabc(过些天跟布什二女儿订婚))回复于 2006-12-01 13:00:03 得分 0
insert into ai(ii)values('1')
insert into ai(ii)values('1')
insert into ai(ii)values('1')
insert into ai(ii)values('1')
insert into ai(ii)values('1')
insert into ai(ii)values('1')
select * from ai
--------------------------
id ii
link_1 1
link_2 1
link_3 1
link_4 1
link_5 1
link_6 1
Top
12 楼roy_88(中国风_燃烧你的激情!!!)回复于 2006-12-01 13:08:55 得分 0
列子
create table roy(id char(3),name varchar(5))
--定义一个函数
create function roy_fun(@id char(3)=null)
returns char(3)
as
begin
declare @new char(3)
(select @new=replicate('0',(3-len(max(cast(isnull(id,0) as int))+1)))
+cast((max(cast(id as int))+1)as varchar)
from roy)
return(@new)
end
--定义触发器
create trigger roy_tr on roy
for insert
as
update roy
set id=isnull(dbo.roy_fun(null),'001')
where id is null
--测试
insert into roy(name) values('a')
select * from roy
结果:
id name
---- -----
001 a
002 a
Top
13 楼wwfy(我舞飞扬)回复于 2006-12-01 13:21:57 得分 5
我想让主键的值是:lik_123
lik后面的数字自动增加怎么弄。谢谢
-------------------------------------
设计这样的结构纯属给自己找麻烦!
前面的 lik_ 有什么用?!Top
14 楼roy_88(中国风_燃烧你的激情!!!)回复于 2006-12-01 13:29:40 得分 30
create table ta(id varchar(10)primary key ,name varchar(10))
create trigger test_ta_tr on ta
instead of insert
as
declare @int varchar(50)
select * into # from inserted
select @int=isnull(max(replace(id,'lik_','')),122) from ta--这里改为122就行了
update # set id='lik_'+@int,@int=@int+1
insert ta
select * from #
--测试
insert ta
select 1,'a'union all--这里1为任何值都不影响id插入的值
select 1,'b'
select * from ta
id name
---------- ----------
lik_123 a
lik_124 b
(所影响的行数为 2 行)
Top
15 楼roy_88(中国风_燃烧你的激情!!!)回复于 2006-12-01 13:39:17 得分 0
用函数主要用于查询,更新不支持批量插入Top
16 楼qzjackie(qzjackie)回复于 2006-12-01 13:46:30 得分 0
先谢谢朋友们的..
可是,我的表建完了。肯定是要更新的啊!!
Top
17 楼roy_88(中国风_燃烧你的激情!!!)回复于 2006-12-01 13:55:32 得分 0
楼主把数据贴出来,如果批量更新。
需要用变量赋值实现如:
declare @int varchar(50)
select * into # from inserted
select @int=isnull(max(replace(id,'lik_','')),122) from ta--这里改为122就行了
update # set id='lik_'+@int,@int=@int+1Top





