高手帮助....

qzjackie 2006-12-01 11:48:31
我在创建表的时候。想让主键自动增加,自动填入。
如主键是titleID
我想让主键的值是:lik_123
lik后面的数字自动增加怎么弄。谢谢
...全文
273 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackeyabc 2006-12-01
  • 打赏
  • 举报
回复
上面的有错,更正如下
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)


caixia615 2006-12-01
  • 打赏
  • 举报
回复
up
jackeyabc 2006-12-01
  • 打赏
  • 举报
回复
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)

你看这个应该达到你的要求了么?
marco08 2006-12-01
  • 打赏
  • 举报
回复
學習
qzjackie 2006-12-01
  • 打赏
  • 举报
回复
要怎么写啊???
中国风 2006-12-01
  • 打赏
  • 举报
回复
用触发器可以实现/或用楼上的计算列方式

jackeyabc 2006-12-01
  • 打赏
  • 举报
回复
用自定义函数,先mark一下,吃饭回来帮你写~这个简单~
xlhl 2006-12-01
  • 打赏
  • 举报
回复
用计算列
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
COMMIT
tanqimin 2006-12-01
  • 打赏
  • 举报
回复
这个我也想知道,帮顶!
冷箫轻笛 2006-12-01
  • 打赏
  • 举报
回复
写函数实现
中国风 2006-12-01
  • 打赏
  • 举报
回复
楼主把数据贴出来,如果批量更新。
需要用变量赋值实现如:
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
qzjackie 2006-12-01
  • 打赏
  • 举报
回复
先谢谢朋友们的..

可是,我的表建完了。肯定是要更新的啊!!
中国风 2006-12-01
  • 打赏
  • 举报
回复
用函数主要用于查询,更新不支持批量插入
中国风 2006-12-01
  • 打赏
  • 举报
回复
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 行)

召集令 2006-12-01
  • 打赏
  • 举报
回复
我想让主键的值是:lik_123
lik后面的数字自动增加怎么弄。谢谢
-------------------------------------
设计这样的结构纯属给自己找麻烦!
前面的 lik_ 有什么用?!
中国风 2006-12-01
  • 打赏
  • 举报
回复
列子
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
jackeyabc 2006-12-01
  • 打赏
  • 举报
回复
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

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧