我想把源表的数据导到一张新表,先select * into 到新表,
在给ID字段修改为自增,因为原有ID列数据是不能丢的,sqlserver企业管理器界面里数据导完后,
可以修改,但脚本好像不能直接
“alter table table_1 alter column id int identity(1,1)”,请高手指点,因为我有一批这样的表,
手动点界面要慢死的!
在给ID字段修改为自增,因为原有ID列数据是不能丢的,sqlserver企业管理器界面里数据导完后,
可以修改,但脚本好像不能直接
“alter table table_1 alter column id int identity(1,1)”,请高手指点,因为我有一批这样的表,
手动点界面要慢死的!
可以在新表中加一个IDD列
alter table table_1 alter column id int identity(1,1)这个我就不懂了。既然你之前的列如果是自增的列,为何还有修改呢,如果不是自增的,你修改之后如何保存之前的值呢
“alter table table_1 alter column id int identity(1,1)”这样写不对,应该这么改呢?
--创建测试数据
if OBJECT_ID('T_a') is not null drop table T_a
create table T_a(
id int identity(1,2),--每次自增2
name nvarchar(20))insert T_a(name)
SELECT 'AAA' union all
SELECT 'BBB' union all
SELECT 'CCC' union all
SELECT 'DDD' union all
SELECT 'EEE' union all
SELECT 'FFF' /*------------------------------一个案例便于理解(下面封装到存储过程里面了)--------------------------------
--创建新表(T_b)复制结构复制旧表 T_a
if OBJECT_ID('T_b') is not null drop table T_b
--创建新表(字段结构复制于旧表)
select * into T_b from T_a where 1<>1
--删除标示 id
alter table T_b drop column id
--新增一列标示 id1
alter table T_b add id1 int identity(1,1)
--又新增(还原)旧表标示列 id
alter table T_b add id int
--得到旧表所有列
declare @columnname nvarchar(max)
select @columnname=','+[name]+isnull(@columnname,'') from syscolumns where id=object_id('T_a')
set @columnname=right(@columnname,len(@columnname)-1)
--新表从旧表复制数据
declare @sql nvarchar(500)
set @sql='INSERT INTO T_b('+@columnname+')select '+@columnname+' from T_a'
exec (@sql)
--查询新表数据
select * from T_b
------------------------------------------------------------------------------------------*/create procedure CopyTable(
@OldtableName nvarchar(50),--旧表名
@NewtableName nvarchar(50),--新表名
@Oldid nvarchar(50),--旧表标示
@Newid nvarchar(50)--新表标示
)
as
begin
declare @strsql varchar(max)
--创建新表(T_b)复制结构复制旧表 T_a
set @strsql='if OBJECT_ID('''+@NewtableName+''') is not null drop table '+@NewtableName
--创建新表(字段结构复制于旧表)
set @strsql=@strsql+' select * into '+@NewtableName+' from '+@OldtableName+' where 1<>1'
--删除标示 id
set @strsql=@strsql+' alter table '+@NewtableName+' drop column '+@Oldid
--新增一列标示 id1
set @strsql=@strsql+' alter table '+@NewtableName+' add '+@Newid+' int identity(1,1) '
--又新增(还原)旧表标示列 id
set @strsql=@strsql+' alter table '+@NewtableName+' add '+@Oldid+' int'
--得到旧表所有列
set @strsql=@strsql+' declare @columnname nvarchar(max)'
set @strsql=@strsql+' select @columnname='',''+[name]+isnull(@columnname,'''') from syscolumns where id=object_id('''+@OldtableName+''')
set @columnname=right(@columnname,len(@columnname)-1)'
--新表从旧表复制数据
set @strsql=@strsql+' declare @sql nvarchar(500) '
set @strsql=@strsql+' set @sql=''INSERT INTO '+@NewtableName+'(''+@columnname+'')select ''+@columnname+'' from '+@OldtableName+''''
set @strsql=@strsql+' exec (@sql) '
--查询新表数据
set @strsql=@strsql+'select * from '+@NewtableName
exec(@strsql)
end--调用
exec CopyTable 'T_a','T_c','id','id3'
/*
name id3 id
-------------------- ----------- -----------
AAA 1 1
BBB 2 3
CCC 3 5
DDD 4 7
EEE 5 9
FFF 6 11(6 行受影响)
*/