频道栏目
首页 > 数据库 > SQL Server > 正文
怎样用sql语句复制表table1到表table2的同时复制主键
2013-10-15 11:33:49           
收藏   我要投稿

怎样用sql语句复制表table1到表table2的同时复制主键

 

在从table1表复制到table2的时候,我们会用语句:

[sql] 
select * into table2 from table1  

 

 

但这个语句并不能在复制数据的同时,复制主键。

 

下面的代码通过动态语句,来实现在复制数据的同时,也会复制主键:

 

[sql] 
if OBJECT_ID('table1') is not null  
   drop table table1  
go  
  
create table table1  
(  
id  int  ,  
idd int,  
vvv varchar(100),  
primary key (id,idd)  --为了实验在主键有多个字段的情况,所有主键这里有2个字段  
)  
  
insert into table1  
select 1,1,'a' union all  
select 1,2,'b' union all  
select 2,1,'a'   
go  
  
  
declare @old_table_name varchar(30)  
declare @new_table_name varchar(30)  
declare @is_clustered varchar(10)  
declare @sql varchar(1000)  
  
set @old_table_name = 'table1';  
set @new_table_name = 'table2';  
set @is_clustered = '';  
set @sql = '';  
  
select @is_clustered = i.type_desc,  
  
       @sql = @sql + ',' + c.name +  
              case when ic.is_descending_key = 0  
                        then ' asc'  
                   else ' desc'  
              end  
                
from sys.tables t  
inner join sys.indexes i  
        on t.object_id = i.object_id  
inner join sys.index_columns ic  
        on i.object_id = ic.object_id  
           and i.index_id = ic.index_id  
inner join sys.columns c  
        on c.column_id = ic.column_id  
           and c.object_id = ic.object_id  
where i.is_primary_key = 1  
      and t.name = @old_table_name  
order by key_ordinal  
  
  
  
select @sql = 'if object_id(''' + @new_table_name + ''') is not null' +  
              ' drop table ' + @new_table_name +';' +  
              'select * into ' + @new_table_name +   
              ' from ' + @old_table_name + ';' +  
                
              'alter table ' + @new_table_name +  
              ' add primary key ' + @is_clustered +   
              '(' + stuff(@sql,1,1,'') + ')'  
  
select @sql    
/*  
if object_id('table2') is not null   
   drop table table2;  
  
select * into table2 from table1;  
  
alter table table2 add primary key CLUSTERED(id asc,idd asc)  
*/                
  
exec(@sql)  
  
select *  
from table2  
/*  
id  idd vvv  
1   1   a  
1   2   b  
2   1   a  
*/  

 


点击复制链接 与好友分享!回本站首页
相关TAG标签 语句 同时
上一篇:SQL Server 2012 'sa'登录错误18456解决
下一篇:Delete语句和Output子句
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站