CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

如何在有identity属性的字段上去除identity属性,只能用sql语句完成。急!!!!!!

楼主bciAnson(Anson)2005-02-28 15:16:46 在 MS-SQL Server / 基础类 提问

数据库现在一张表a,它有一个字段为[id]   int   identity(1,1)    
  我要用sql语句去掉表a   id字段的identity属性。  
  请自位高手指教。十万火急!!!!!!!!!!!!!!!!!!!!!!!! 问题点数:50、回复次数:16Top

1 楼jinjazz(近身剪)回复于 2005-02-28 15:19:43 得分 0

ALTER   TABLE   表   ADD   编号1   bigint   identity(1,1)   not   null  
  go  
  SET   IDENTITY_INSERT   表   ON  
  go  
  update   tablename   set   编号1=编号  
  go  
  SET   IDENTITY_INSERT   表   OFF  
  go  
  ALTER   TABLE   表   DROP   COLUMN   编号    
  go  
  exec   sp_rename   '表.编号1','编号'  
  go  
  Top

2 楼pbsql(风云)回复于 2005-02-28 15:23:21 得分 5

alter   table   a   add   xxx   int  
  update   a   set   xxx=id  
  alter   table   a   drop   column   id  
  exec   sp_rename   'xxx',   'id',   'column'Top

3 楼bciAnson(Anson)回复于 2005-02-28 15:29:30 得分 0

注意:不能改变id的位置,因为我还要做这样的操作的  
  insert   into   a    
  select   *   from   b  
  a和b的数据结构是一至的.Top

4 楼tipbase(信口开河)回复于 2005-02-28 16:58:44 得分 0

alter   table   a   alter   column   id   int   not   nullTop

5 楼bciAnson(Anson)回复于 2005-02-28 17:21:35 得分 0

大家帮个忙再查一下。微软也没有公布过T-SQL是怎么写,只解释用企业管理器怎么做。Top

6 楼pbsql(风云)回复于 2005-02-28 17:26:21 得分 5

只能是新建一列、拷贝数据、删除原列、改列名,但这样会改变id的位置  
   
  insert   into   a   select   *   from   b  
  改为:  
  insert   into   a(字段列表)  
    select   字段列表   from   b  
  Top

7 楼bciAnson(Anson)回复于 2005-02-28 17:43:58 得分 0

这样会晕死的,有44几个字段。我也看了一些老外的贴,他们也没搞到。  
  一定可以用脚本做的。只是没有公布吧了。  
  很多时我们想利用现在的数据表动态创建一些表结构相同的表,但往往会有这个问题  
  select   top   1   *   into   a   from   aa   where   1=0    
  .......  
  .......  
  insert   into   a    
  select   *   from   c  
  这里c跟a结构相同,但因为有identity列,所以失败Top

8 楼yjzhg(执著)回复于 2005-02-28 17:51:18 得分 0

cast(a   as   varchar(10))Top

9 楼yjzhg(执著)回复于 2005-02-28 17:52:14 得分 5

insert   into   a    
  select   cast(a   as   varchar(10)),。。。   from   cTop

10 楼bciAnson(Anson)回复于 2005-03-09 17:54:09 得分 0

yjzhg(执著)  
  ============  
  1.你改了数据类型,不行  
  2.我想要的是用语句去掉identity属性.  
   
  Top

11 楼netcoder(朱二)回复于 2005-03-09 19:25:40 得分 5

试用下面的语句,但不能保证不会有后遗症,所有强烈推荐:  
  ******************  
  先做好数据库的备份  
  ******************  
   
  sp_configure   'allow   updates',   1  
  GO  
  reconfigure   with   override  
  GO  
  update   syscolumns   set   colstat   =   colstat   &   0x0000    
  where     id=object_id('a')   and   name='id'  
  GO  
  sp_configure   'allow   updates',   0  
  Top

12 楼dxhdxh(anyduan)回复于 2005-03-09 21:58:24 得分 5

ALTER   TABLE   表   ADD   编号1   int  
  go  
  SET   IDENTITY_INSERT   表   ON  
  go  
  update   tablename   set   编号1=编号  
  go  
  SET   IDENTITY_INSERT   表   OFF  
  go  
  ALTER   TABLE   表   DROP   COLUMN   编号    
  go  
  exec   sp_rename   '表.编号1','编号'  
  Top

13 楼631799(杭州工人)回复于 2005-03-09 23:15:10 得分 0

select   top   1   *   into   a   from   c   where   1=0    
  .......  
  .......  
  set   identity_insert   a   on  
  insert   into   a   select   *   from   c  
  set   identity_insert   a   off  
   
   
  -------------------------------------------------  
   
  这样会晕死的,有44几个字段。我也看了一些老外的贴,他们也没搞到。  
  一定可以用脚本做的。只是没有公布吧了。  
  很多时我们想利用现在的数据表动态创建一些表结构相同的表,但往往会有这个问题  
  select   top   1   *   into   a   from   aa   where   1=0    
  .......  
  .......  
  insert   into   a    
  select   *   from   c  
  这里c跟a结构相同,但因为有identity列,所以失败  
  Top

14 楼631799(杭州工人)回复于 2005-03-09 23:16:57 得分 25

系统表写功能,不然无法创建存储过程  
  exec   sp_configure   'allow   updates',1   reconfigure   with   override  
  go  
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_addfield]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_addfield]  
  GO  
   
  /*--在指定位置添加字段  
   
  添加字段到表中的指定位置  
  注意,字段定义必须符合   alter   table   add   ...的规定  
  插入的位置从0开始,到字段数目-1结束  
  如果超过这个范围,则在表的尾部添加字段  
  一次只能添加一个字段,和   alter   table   的限制完全一样  
   
  --邹建   2004.07(引用请保留此信息)--*/  
   
  /*--使用示例  
  --测试表  
  create   table   tb(a   int)  
   
  --添加字段  
  exec   p_addfield   'tb','id   int',0 --在最前面添加字段  
  exec   p_addfield   'tb','id1   int',0  
  exec   p_addfield   'tb','id2   int',2   --在第2个字段前面添加字段  
   
  --显示添加结果  
  select   *   from   tb  
   
  --删除测试  
  drop   table   tb  
  --*/  
  create   proc   p_addfield  
  @tbname   sysname,  
  @fd_define   nvarchar(1000), --字段定义(必须是合法的字段定义)  
  @colid   int=-1 --添加位置:0--fieldcount-1,0表示在第一个字段前插入,-1或效的colid表示插入在最后  
  as  
  declare   @s   nvarchar(4000)  
   
  if   isnull(objectproperty(object_id(@tbname),'IsUserTable'),0)=0  
  begin  
  select   错误='无效的表名'  
  return  
  end  
   
  --添加字段  
  set   @s='alter   table   ['+replace(@tbname,']',']]')+']   add   '+@fd_define  
  exec(@s)  
   
  --如果是添加在所有字段的未尾,则直接返回即可  
  if   not   exists(select   1   from   syscolumns   where   id=object_id(@tbname)   and   colid   between   1   and   @colid+1)  
  return  
   
  --开启系统表写开关  
  exec   sp_configure   'allow   updates',1   reconfigure   with   override  
   
  set   xact_abort   on  
  begin   tran  
  update   syscolumns   set   colid=colid+1  
  where   id=object_id(@tbname)  
  and   colid>@colid  
   
  update   syscolumns   set   colid=@colid+1  
  where   id=object_id(@tbname)  
  and   colid=(  
  select   max(colid)   from   syscolumns    
  where   id=object_id(@tbname))  
  commit   tran  
   
  --关闭系统表写开关  
  exec   sp_configure   'allow   updates',0   reconfigure   with   override  
  goTop

15 楼bciAnson(Anson)回复于 2005-03-10 20:40:01 得分 0

感谢各位的帮忙,特别感谢   631799(杭州工人)    
  =========================================  
  Top

16 楼czjcsdn(葫芦)回复于 2005-04-30 13:16:06 得分 0

netcoder(朱二)    
  强啊,学到Top

相关问题

  • 如何通过SQL语句给表中字段新增Identity属性?
  • 怎样使用SQL语句去掉自增长字段的IDENTITY属性?
  • 一个SQL语句的字段问题
  • 请教设置字段的SQL语句
  • 更改字段顺序 SQL 语句
  • 如何追加字段,求sql语句?
  • 求sql语句A表1字段=B表1字段+B表2字段??
  • 一个int型字段,原先不是identity型的,如何用SQL语句将其改为identity型
  • 能否用sql语句来改变字段的顺序??如果用sql语句添加字段??急!!
  • 能否利用sql语句改变字段的顺序??如何用sql语句添加字段??急!

关键词

  • 字段
  • 属性
  • 语句
  • 结构
  • top
  • identity
  • addfield
  • 表
  • 添加
  • insert

得分解答快速导航

  • 帖主:bciAnson
  • pbsql
  • pbsql
  • yjzhg
  • netcoder
  • dxhdxh
  • 631799

相关链接

  • SQL Server类图书

广告也精彩

反馈

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