CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

100分呀,很容易的,关于字段值自增的问题????????

楼主xjb_netboy(绝对有问题)2003-12-03 10:48:12 在 MS-SQL Server / 疑难问题 提问

有两个表,主表与,子表,子表.id与主表.id是一对一关系,主表.id是自增型  
   
  CREATE   TABLE   [主表]   (  
  [id]   [int]   IDENTITY   (1,   1)   NOT   NULL   ,/*   id   自增型*/  
  [字段]   [char]   (10)     NULL    
  )   ON   [PRIMARY]  
  GO  
   
  CREATE   TABLE   [子表]   (  
  [id]   [int]   NOT   NULL   ,   /*   id   不自增   */  
  [字段]   [char]   (10)     NULL    
  )   ON   [PRIMARY]  
  GO  
   
  视图  
  SELECT   主表.字段,   主表.id,   子表.字段   ,   子表.id    
  FROM   主表   INNER   JOIN  
              子表   ON   主表.id   =   子表.id  
   
   
  有个问题要讨论,就是两个表,一个主表.id自增,子表.id不自增,当我在视图中插入数据时,   要求子表.id的值等于主表.id自增的值,  
  问题是,1.我怎样取得主表将要插入数据是时,id的自增值?  
   
                  2.能不能编个触发器来实现?    
   
  请大侠指点 问题点数:100、回复次数:13Top

1 楼CrazyFor(冬眠的鼹鼠)回复于 2003-12-03 11:03:28 得分 10

1,  
    Transact-SQL   参考    
   
     
  @@IDENTITY  
  返回最后插入的标识值。  
   
  语法  
  @@IDENTITY  
   
  返回类型  
  numeric  
   
  注释  
  在一条   INSERT、SELECT   INTO   或大容量复制语句完成后,@@IDENTITY   中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则   @@IDENTITY   返回   NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY   返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用   @@IDENTITY   将返回由触发器产生的最后的标识值。若   INSERT   或   SELECT   INTO   语句失败或大容量复制失败,或事务被回滚,则   @@IDENTITY   值不会还原为以前的设置。  
   
  在返回插入到表的   @@IDENTITY   列的最后一个值方面,@@IDENTITY、SCOPE_IDENTITY   和   IDENT_CURRENT   函数类似。    
   
  @@IDENTITY   和   SCOPE_IDENTITY   将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY   只在当前作用域内返回值,而   @@IDENTITY   不限于特定的作用域。  
   
  IDENT_CURRENT   不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT   返回任何会话和任何作用域中为特定表生成的标识值。有关更多信息,请参见   IDENT_CURRENT。  
   
  示例  
  下面的示例向带有标识列的表中插入一行,并用   @@IDENTITY   显示在新行中使用的标识值。  
   
  INSERT   INTO   jobs   (job_desc,min_lvl,max_lvl)  
  VALUES   ('Accountant',12,125)  
  SELECT   @@IDENTITY   AS   'Identity'  
   
   
  请参见  
   
  CREATE   TABLE  
   
  IDENT_CURRENT  
   
  INSERT  
   
  SCOPE_IDENTITY  
   
  SELECT  
   
  系统函数  
   
  ©1988-2000   Microsoft   Corporation。保留所有权利。  
   
   
   
  2,  
  可以Top

2 楼myflok(老虎爱吃肉)回复于 2003-12-03 11:12:00 得分 20

1        
   
  INSERT   INTO   主表   (主表.字段)  
  VALUES   (主表.字段值)  
  SELECT   @@IDENTITY   AS   'Identity'  
   
  2  
  可以  
   
  Top

3 楼wzh1215(懒猫)回复于 2003-12-03 11:15:12 得分 20

1.  
  INSERT   INTO   主表   (字段)  
  VALUES   (字段值)  
  SELECT   @@IDENTITY    
  2.你想用触发器干嘛,触发器一般都是用来保证数据的完整性,一致性!Top

4 楼txlicenhe(马可)回复于 2003-12-03 11:17:50 得分 5

联机帮助:  
  @@identityTop

5 楼mywhsw(bamboo)回复于 2003-12-03 11:23:20 得分 5

编个触发器得了,放到id自增1的表里Top

6 楼dlpseeyou(豆子)回复于 2003-12-03 11:25:13 得分 0

alter   table   表名   add   id   int   identity(1,1)Top

7 楼theforever(碧海情天)回复于 2003-12-03 11:34:21 得分 5

我和   mywhsw(bamboo)   意见一样.这样比较容易.  
  四脚蛇对触发器的认识好象有点狭隘.木头是用来烧的,可是也可以做成家俱.Top

8 楼xjb_netboy(绝对有问题)回复于 2003-12-03 11:44:57 得分 0

大家好像误解我的意思了,我是用视图把两个表连接起来了,我是想在视图中操作,而不是一个表,一个表的操作。  
  视图  
  SELECT   主表.字段,   主表.id,   子表.字段   ,   子表.id    
  FROM   主表   INNER   JOIN  
              子表   ON   主表.id   =   子表.id  
  主表.id自增,当在视图insert数据时,主表.id因为自增,所以不要输入,现在关键是,子表.id要让它等于,主表.id自增的值。  
  是在视图中,相当于一个表。  
   
  Top

9 楼zjcxc(邹建)回复于 2003-12-04 14:55:48 得分 10

--这样建触发器就行了.  
   
  --创建数据处理的触发器  
  create   trigger   t_insert   on   视图  
  instead   of   insert  
  as  
  declare   @字段   char(10),@c字段   char(10)  
  declare   tb   cursor   local   for   select   字段,c字段   from   inserted  
  open   tb  
  fetch   next   from   tb   into   @字段,@c字段  
  while   @@fetch_status=0  
  begin  
  insert   into   主表   values(@字段)  
  insert   into   子表   values(@@identity,@c字段)  
  fetch   next   from   tb   into   @字段,@c字段  
  end  
  close   tb  
  deallocate   tb  
  goTop

10 楼zjcxc(邹建)回复于 2003-12-04 14:56:03 得分 10

--下面是数据测试  
   
  --创建测试表  
  CREATE   TABLE   主表(id   int   IDENTITY(1,1)   NOT   NULL, 字段   char(10))  
   
  CREATE   TABLE   子表(id   int   NOT   NULL,字段   char(10))  
  go  
  --创建视图  
  create   view   视图  
  as  
  SELECT   a.id,a.字段,cid=b.id,c字段=b.字段    
  FROM   主表   a   INNER   JOIN   子表   b   ON   a.id=b.id  
   
  go  
  --创建数据处理的触发器  
  create   trigger   t_insert   on   视图  
  instead   of   insert  
  as  
  declare   @字段   char(10),@c字段   char(10)  
  declare   tb   cursor   local   for   select   字段,c字段   from   inserted  
  open   tb  
  fetch   next   from   tb   into   @字段,@c字段  
  while   @@fetch_status=0  
  begin  
  insert   into   主表   values(@字段)  
  insert   into   子表   values(@@identity,@c字段)  
  fetch   next   from   tb   into   @字段,@c字段  
  end  
  close   tb  
  deallocate   tb  
  go  
   
  --插入数据测试  
  insert   into   视图   values(1,'aa',2,'11')  
   
  insert   into   视图  
  select   2,'bb',3,'22'  
  union   all   select   3,'cc',4,'33'  
  union   all   select   4,'dd',5,'44'  
   
  --显示结果  
  select   *   from   视图  
  go  
  --删除测试环境  
  drop   view   视图  
  drop   table   主表,子表  
   
  /*--测试结果  
  id                     字段                   cid                   c字段                  
  -----------   ----------   -----------   ----------    
  1                       aa                   1                       11                  
  2                       bb                   2                       22                  
  3                       cc                   3                       33                  
  4                       dd                   4                       44                  
   
  (所影响的行数为   4   行)  
  --*/Top

11 楼zkhj(学习.Net中......)回复于 2003-12-04 16:13:57 得分 0

upTop

12 楼laurecn(每天努力多一点)回复于 2003-12-04 19:20:07 得分 15

create       procedure   sp_InsReg  
      @RecordID   varchar(10)  
  as  
      Insert   into   T_Reg(RecordID)  
          values(@RecordID)  
      select   @InvoiceID=@@Identity  
   
  可以参考一下Top

13 楼webnewboy()回复于 2003-12-04 19:20:58 得分 0

upTop

相关问题

  • 字段值自动增加
  • 增加字段
  • Sybase中实现字段值自增。
  • 取得自动增长字段的值?
  • 如何在oracle 加个自动增加的字段(指的是字段值)
  • TADOQuery中增加一计算字段后,append,然后用fieldbyname()给一key字段赋值,会出现错误
  • 在SQL中怎样自动生成一个字段并字段值自动增加!!
  • 在SQL查询时,怎样添加一字段并字段的值自动增加,!!!!!!!!!!!
  • 在ACCESS表中增加一个不知道字段名的字段,后给它赋值
  • 如何使用sql语句新增一字段(access),包含字段数据类型及默认值等

关键词

  • 字段
  • 视图
  • 语句
  • 数据
  • null
  • 主表
  • identity
  • 触发器
  • 值
  • 表

得分解答快速导航

  • 帖主:xjb_netboy
  • CrazyFor
  • myflok
  • wzh1215
  • txlicenhe
  • mywhsw
  • theforever
  • zjcxc
  • zjcxc
  • laurecn

相关链接

  • SQL Server类图书

广告也精彩

反馈

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