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


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

  1. select * into table2 from table1

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

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

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

                                                                                                                                                                  发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

                                                                                                                                                                  怎样用sql语句复制表table1到表table2的同时复制主键的更多相关文章

                                                                                                                                                                  1. sql语句复制表

                                                                                                                                                                    1.复制表结构及数据到新表CREATE TABLE 新表 SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete from newtable; ...

                                                                                                                                                                  2. Oracle和sql server中复制表结构和表数据的sql语句

                                                                                                                                                                    在Oracle和sql server中,如何从一个已知的旧表,来复制新生成一个新的表,如果要复制旧表结构和表数据,对应的sql语句该如何写呢?刚好阿堂这两天用到了,就顺便把它收集汇总一下,供朋友们参考 ...

                                                                                                                                                                  3. sql语句 怎么从一张表中查询数据插入到另一张表中?

                                                                                                                                                                    sql语句 怎么从一张表中查询数据插入到另一张表中?  ----原文地址:http://www.phpfans.net/ask/MTc0MTQ4Mw.html 比如我有两张表 table1 字段 un ...

                                                                                                                                                                  4. SQL语句分组排序,多表关联排序

                                                                                                                                                                    SQL语句分组排序,多表关联排序总结几种常见的方法: 案例一: 在查询结果中按人数降序排列,若人数相同,则按课程号升序排列? 分析:单个表内的多个字段排序,一般可以直接用逗号分割实现. select ...

                                                                                                                                                                  5. sql语句,怎么查看一个表中的所有约束

                                                                                                                                                                    sql语句,怎么查看一个表中的所有约束,比如,一个student表,有唯一,外键,主键,用sql语句怎么查看student表中的所有约束呢? select * from sysobjects wher ...

                                                                                                                                                                  6. SQL语句获取数据库中的表主键,自增列,所有列

                                                                                                                                                                    SQL语句获取数据库中的表主键,自增列,所有列   获取表主键 1:SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_U ...

                                                                                                                                                                  7. sql语句建表,并且自增加主键

                                                                                                                                                                    sql语句建表,并且自增加主键 use [test] CREATE TABLE [dbo].[Table_4] ( [userid] [int] IDENTITY(1,1) NOT NULL, CON ...

                                                                                                                                                                  8. Sql Server 复制表

                                                                                                                                                                    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句 1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,fiel ...

                                                                                                                                                                  9. SQL语句汇总(一)——数据库与表的操作以及创建约束

                                                                                                                                                                    首先,非常感谢大家对上篇博文的支持,真是让本菜受宠若惊,同时对拖了这么久才出了此篇表示抱歉. 前言:此文旨在汇总从建立数据库到联接查询等绝大部分SQL语句.SQL语句虽不能说很多,但稍有时间不写就容易 ...

                                                                                                                                                                  随机推荐

                                                                                                                                                                  1. 如何获取UA?

                                                                                                                                                                    代码: function whatBrowser() { document.Browser.Name.value = navigator.appName; document.Browser.Versi ...

                                                                                                                                                                  2. Git的基本使用汇总整理

                                                                                                                                                                    初始化一个Git仓库,使用 git init 命令,此时会创建一个默认的master分支.添加文件到Git仓库,分两步: 使用命令git add <file>,将文件添加到暂存区: 使用命 ...

                                                                                                                                                                  3. 001-http-总览、文件配置、常用http client、http连接池

                                                                                                                                                                    一.概述 http请求项目搭建:地址:https://github.com/bjlhx15/common-study.git 中的common-http 主要针对post请求中的,form表单[app ...

                                                                                                                                                                  4. 单例模式-java

                                                                                                                                                                    /** * The MIT License * Copyright (c) 2014-2016 Ilkka Seppälä * <p> * Permission is hereby gra ...

                                                                                                                                                                  5. iOS-MMDrawerController第三方库的使用(转)

                                                                                                                                                                    链接:https://github.com/mutualmobile/MMDrawerController ,根据导航item+滚动条progressView实现的手势滑动切换视图的 MMDrawer ...

                                                                                                                                                                  6. java、ruby、python、php等如何生成excel文档?

                                                                                                                                                                    excel在我们日常工作生活中会经常用到,通常我们都是用office软件去编写文档.但是对于格式一致的excel文档,如果还是使用人工完成,那绝不是我们软件工程师的姿态了~ 下面我就介绍一种方法,不需 ...

                                                                                                                                                                  7. 最新 海看java校招面经 (含整理过的面试题大全)

                                                                                                                                                                    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.海看等10家互联网公司的校招Offer,因为某些自身原因最终选择了海看.6.7月主要是做系统复习.项目复盘.LeetCode ...

                                                                                                                                                                  8. Netty学习笔记(三)——netty源码剖析

                                                                                                                                                                    1.Netty启动源码剖析 启动类: public class NettyNioServer { public static void main(String[] args) throws Excep ...

                                                                                                                                                                  9. eNSP——静态路由的基本配置

                                                                                                                                                                    原理: 静态路由是指用户或网络管理员手工配置的路由信息.当网络的拓扑结构或链路状态发生改变时,需要网络管理人员手工修改静态路由信息. 相比于动态路由协议,静态路由无需频繁地交换各自的路由表,配置简单, ...

                                                                                                                                                                  10. 处理人际关系的5大原则zz

                                                                                                                                                                    人际关系题是结构化面试当中重要的题型之一,人们常用两个“70%”来形容人际关系的重要性: 人际关系题主要考察考生不同人际关系间的适应性.人际合作的主动性.处理人际关系的原则性和灵活性以及对组织中权属关 ...