欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

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

更新时间: 2014-01-05 02:07:27 责任编辑: Author_N1

 

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

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

select * into table2 from table1

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


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


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
*/


上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:07:27
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/5885/
本文WWW.DOC100.NET DOC100.NET版权所有。