动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   数据库 → 阅读文章

 将表中字段转换,并保留原值

作者来源: 
阅读 数 384 人次 , 2006-4-20 9:47:00 

  /*--将表中的某个字段转换成标识字段,并保留原来的值

  注意,因为要删除原表,所以,如果表和其他表的关联,这些关联要重新创建

  --邹建 2003.12--*/

  /*--调用示例

  exec p_setid '表名','要转换的字段名'
  --*/

  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_setid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
  drop procedure [dbo].[p_setid]
  GO

  CREATE PROC P_SETID
  @tbname sysname, --要处理的表名
  @fdname sysname --要转换为标识字段的字段名
  as
  declare @s1 varchar(8000),@s2 varchar(8000),@tmptb sysname
  select @s1='',@s2='',@tmptb='[tmp_'+@tbname+'_bak]'
  select @s1=@s1+',['+name+']'
  +case name when @fdname then '=identity(bigint,1,1)' else '' end
,@s2=@s2+',['+name+']'
  from syscolumns where object_id(@tbname)=id


  select @s1=substring(@s1,2,8000),@s2=substring(@s2,2,8000)
  exec('select top 0 '+@s1+' into '+@tmptb+' from ['+@tbname+']
  set identity_insert '+@tmptb+' on
  insert into '+@tmptb+'('+@s2+') select '+@s2+' from ['+@tbname+']
  set identity_insert '+@tmptb+' off
  ')
  exec('drop table ['+@tbname+']')
  exec sp_rename @tmptb,@tbname
  go
 
  /*==========================================================*/

  --使用测试

  --创建测试的表
  create table 表(编号 bigint,姓名 varchar(10))
  insert into 表
  select 1,'张三'
  union all select 2,'李四'
  union all select 4,'王五'
  go

  --调用存储过程,将编号字段改为标识字段
  exec p_setid '表','编号'
  go

  --显示处理结果
  select * from 表

  --显示是否修改成功
  select name from syscolumns
  where object_id('表')=id and status=0x80
  go

  --删除测试
  drop table 表

  
 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:数据库学习:查询区分大小写
· 下一篇:数据库学习:在视图中用order by
· Oracle 8i在P4上的安装
· sql server 中各个系统表的作用
· Sql Server全文搜索中文出错的问题
· MySQL数据导入与导出之二
· SQL Server常见连接错误


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077