--你可以用动态sql语句来解决--示例 create table tb(id int identity(1,1),aa varchar(10))--生成临时表 declare @s Nvarchar(4000) set @s='ID_Num=IDENTITY(int)' select @s=@s+',['+name+']' +case when status=0x80 then '=cast(['+name+'] as int)' else '' end from syscolumns where id=object_id('tb') exec('select '+@s+' into #t from tb select * from #t')drop table tb--结果:ID_Num id aa ----------- ----------- ----------
eg:如下语句不能执行。
create table tb1(id1 int identity(1,1), id2 int identity(1,1), aa varchar(10))
每个表中只能创建一个标识符列和一个全局唯一标识符列。IDENTITY 属性
标识符列可用 IDENTITY 属性建立,使应用程序开发人员得以对表中所插入的第一行指定标识数字(Identity Seed 属性),并确定要添加到种子上的增量(Identity Increment 属性)以决定后面的标识数字。在向具有标识符列的表中插入值时,Microsoft® SQL Server™ 2000 通过递增种子值的方法自动生成下一个标识值。在用 IDENTITY 属性定义标识符列时应注意以下几点: 一个表只能有一列定义为 IDENTITY 属性,而且该列必须以 decimal、int、numeric、smallint、bigint 或 tinyint 数据类型定义。
可指定种子和增量值。二者的默认值均为 1。
标识符列不允许空值,也不能包含 DEFAULT 定义或对象。
在设置 DENTITY 属性后,可以使用 IDENTITYCOL 关键字在选择表中引用该列。
可以使用 OBJECTPROPERTY 函数确定一个表是否具有 IDENTITY(标识)列,使用 COLUMNPROPERTY 函数确定 IDENTITY 列的名称。
create table tb(id int identity(1,1),aa varchar(10))--生成临时表
declare @s Nvarchar(4000)
set @s='ID_Num=IDENTITY(int)'
select @s=@s+',['+name+']'
+case when status=0x80 then '=cast(['+name+'] as int)' else '' end
from syscolumns
where id=object_id('tb')
exec('select '+@s+' into #t from tb
select * from #t')drop table tb--结果:ID_Num id aa
----------- ----------- ----------