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

原创 2004年02月15日 23:39: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 表

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

/*--将表中的某个字段转换成标识字段,并保留原来的值 注意,因为要删除原表,所以,如果表和其他表的关联,这些关联要重新创建--邹建 2003.12(引用请保留此信息)--*//*--调用示例 exe...
  • zhaowei001
  • zhaowei001
  • 2008年01月03日 15:39
  • 107

将A表中某个字段的值赋给B表某个字段

update A set A.KZXM = (select B.xm from B where A.ID=B.ID and rownum
  • xiayujj123
  • xiayujj123
  • 2014年07月24日 13:43
  • 2596

oracle将一个表中的某个字段的值,同步到另外一张表的某个字段中

比如: A表中的id,value; B表中的id,value,name; 现在要把A表中的value保存到B表中的name中 注:A表跟B表通过id可以关联,但是A表中的id不唯一   ...
  • fraya1234
  • fraya1234
  • 2016年12月09日 10:25
  • 1651

mysql将一个表中的字段值更新到另一个表中指定字段中

UPDATE workinfo set workinfo .objectid=object.objectid from object where workinfo.objectinsidecode=o...
  • happyflyingave
  • happyflyingave
  • 2014年04月22日 17:08
  • 6508

(SQL)数据表中的一个字段的值插入到另一个字段中

比如有一张表table中两个字段,cellname有值,copyname初为空.如下 cellname     copyname 张三1      李四1 王五2 赵钱3 丁云5 李...
  • qq_25040441
  • qq_25040441
  • 2016年11月18日 09:27
  • 334

oracle 如何将一个表的某个字段赋值给另一张表的某个字段

表 assets_cards 的id 是表 LETTING_DETAILSES 的外键,表里字段serial_number 的数据也以pre_serial_number字段存在 表LETTING_DE...
  • IVY_123IVY
  • IVY_123IVY
  • 2012年08月13日 16:42
  • 9993

oracle动态更新(将A表中的某个字段的值赋给B表中的某个字段)

通过Update语句将A表的某列值修改为B表中的指定列的值时,所用的sql语句在Oracle和SQL Server中是不一样的, 代码如下: Oracle中的语句: UPDATE   A S...
  • lqh4188
  • lqh4188
  • 2012年04月14日 15:00
  • 12114

SQL-----将一个表中的字段update到另一个表中的字段

SQL-----将一个表中的字段update到另一个表中的字段
  • hekewangzi
  • hekewangzi
  • 2017年01月18日 22:53
  • 619

MySql按一个字段分组并且取另一个字段最大值的记录

要求:获得按table1_id分组,并且age最大的记录信息,即2、3、5条方法一:select * from (select * from table2 order by age desc) as ...
  • chenaini119
  • chenaini119
  • 2017年12月22日 10:29
  • 50

Oracle中使用一个字段的值批量更新另一个字段

很简单: UPDATE TABLE1 t1 SET t1.COL2= t1.COL1;
  • a_dev
  • a_dev
  • 2017年05月23日 12:00
  • 1296
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:将表中的某个字段转换成标识字段,并保留原来的值
举报原因:
原因补充:

(最多只允许输入30个字)