34,575
社区成员
发帖
与我相关
我的任务
分享
create table t1(id int identity(1,1),ar varchar(10))
insert into t1
select 'ar' union all
select 'b' union all
select 'c'
go
select identity(int,1,1) as iid,* into t2 from t1 --想将筛选出的t1表里的数据增加序号列
select * from t2
drop table t1,t2
--错误
--无法使用 SELECT INTO 语句将标识列添加到表 't2',该表的列 'id' 已继承了标识属性。
/***********************************
问题:要查询t1里的列字段不固定,也就是说是未知的,表里所有的字段也是未知的,对于t1有没有自增的标识列也是未知,
当然也就用不了内连接。
如何将通过查询条件筛选出的t1里的数据增加一个序号列!需要的是sql 2000 语句,2005 也就是row_number()解决的事!
***********************************/
declare @cols varchar(8000),@sql varchar(8000),@identitycolname varchar(8000)
select name INTO #tmpCol
from syscolumns where id=object_id( 'dbo.Table_2') and name!=''--查询表的所有列 存入临时表备用
SELECT @identitycolname=COLUMN_NAME FROM INFORMATION_SCHEMA.columns
WHERE TABLE_NAME='Table_2' AND COLUMNPROPERTY(OBJECT_ID('Table_2'),COLUMN_NAME,'IsIdentity')=1--查询identity对应的列明
SET @cols='';
UPDATE #tmpCol SET @cols=@cols+name+',' WHERE name!=@identitycolname;--将列名存入@cols变量
DROP Table #tmpCol;--删除临时表
SET @cols=substring(@cols,1,len(@cols)-1);
SET @sql='select IDENTITYCOL+0 as '+@identitycolname+','+@cols+',identity(int,1,1) iid INTO tmpResult from dbo.Table_2';--执行静态SQL,通过IDENTITYCOL引用名称未知的Identity列
exec(@sql);
select * from tmpResult;
Select OBJECTPROPERTY(OBJECT_ID(’表名’),’TableHasIdentity’)--如果有,则返回1,否则返回0
declear num int
set num=1
select (num=num+1) as iid,* into t2 from t1
--直接
select * into t2 from t1