CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
(图)邪恶的韩国UMPC 使用 Java 编写数据库应用新规范
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

高手帮助....

楼主qzjackie(qzjackie)2006-12-01 11:48:31 在 MS-SQL Server / 基础类 提问

我在创建表的时候。想让主键自动增加,自动填入。  
  如主键是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

相关问题

关键词

得分解答快速导航

  • 帖主:qzjackie
  • coolingpipe
  • tanqimin
  • xlhl
  • marco08
  • jackeyabc
  • wwfy
  • roy_88

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo