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


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

select * into table2 from table1

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

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


  1. if OBJECT_ID('table1') is not null
  2. drop table table1
  3. go
  4. create table table1
  5. (
  6. id int ,
  7. idd int,
  8. vvv varchar(100),
  9. primary key (id,idd) --为了实验在主键有多个字段的情况,所有主键这里有2个字段
  10. )
  11. insert into table1
  12. select 1,1,'a' union all
  13. select 1,2,'b' union all
  14. select 2,1,'a'
  15. go
  16. declare @old_table_name varchar(30)
  17. declare @new_table_name varchar(30)
  18. declare @is_clustered varchar(10)
  19. declare @sql varchar(1000)
  20. set @old_table_name = 'table1';
  21. set @new_table_name = 'table2';
  22. set @is_clustered = '';
  23. set @sql = '';
  24. select @is_clustered = i.type_desc,
  25. @sql = @sql + ',' + c.name +
  26. case when ic.is_descending_key = 0
  27. then ' asc'
  28. else ' desc'
  29. end
  30. from sys.tables t
  31. inner join sys.indexes i
  32. on t.object_id = i.object_id
  33. inner join sys.index_columns ic
  34. on i.object_id = ic.object_id
  35. and i.index_id = ic.index_id
  36. inner join sys.columns c
  37. on c.column_id = ic.column_id
  38. and c.object_id = ic.object_id
  39. where i.is_primary_key = 1
  40. and t.name = @old_table_name
  41. order by key_ordinal
  42. select @sql = 'if object_id(''' + @new_table_name + ''') is not null' +
  43. ' drop table ' + @new_table_name +';' +
  44. 'select * into ' + @new_table_name +
  45. ' from ' + @old_table_name + ';' +
  46. 'alter table ' + @new_table_name +
  47. ' add primary key ' + @is_clustered +
  48. '(' + stuff(@sql,1,1,'') + ')'
  49. select @sql
  50. /*
  51. if object_id('table2') is not null
  52. drop table table2;
  53. select * into table2 from table1;
  54. alter table table2 add primary key CLUSTERED(id asc,idd asc)
  55. */
  56. exec(@sql)
  57. select *
  58. from table2
  59. /*
  60. id idd vvv
  61. 1 1 a
  62. 1 2 b
  63. 2 1 a
  64. */

发布了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. Flutter移动电商实战 --(49)详细页_Stack制作底部工具栏

    一直悬浮在最下面的 Stack层叠组件.里面用Row 可以横向布局 开始 stack如果想定位就要用position去定位. 修改return返回值的这个地方 大R刷新查看效果,可以看到固定的在左下角 ...

  2. KL距离(相对熵)

    KL距离,是Kullback-Leibler差异(Kullback-Leibler Divergence)的简称,也叫做相对熵(Relative Entropy).它衡量的是相同事件空间里的两个概率分 ...

  3. Linux C Socket编程:文件上传

    一个服务端等待, 客户端上传文件到服务端,通过输入要上传的文件名,目前只做到仅对当前执行文件的目录下的文件,应该在服务端收到文件路径之后进行处理的. 服务端代码: #include <netin ...

  4. EasyUI动态生成菜单

    业务需求:不同角色有不同的权限,我们根据角色加载页面时展示不同的菜单.在easyUI中,菜单一般采用手风琴accordion组件进行展示,一级菜单下可以加载二级菜单,效果如下: 普通用户看到的菜: 管 ...

  5. QML访问C++类内部

    0.前提 C++类需要继承QObject,且有Q_OBJECT宏[所以QT自己的那么多类按道理上QML都是可以直接访问的,nb] 1.QML访问C++中的非private槽函数 可直接调用 信号也是 ...

  6. cookie和session-csrf防护-中间件

    cookie概念: 是由服务器生成,保存在浏览器端的一小段文本信息. cookie特点: 1) cookie是以键值对进行存储的. 2) 浏览器访问网站时,会将本地保存的跟网站相关的所有cookie发 ...

  7. CDS视图篇 1

    CDS视图概览 CDS是Core Data Services的简称,是HANA数据库向上层ABAP应用层提供数据的一种高效的方式,CDS模型是基于数据库data definition language ...

  8. pycharm调用shell命令

    在pycharm中调用shell命令 1.调用普通命令 # -*- coding:UTF-8 -*- import subprocess subprocess.call(["ls /home ...

  9. 多线程,线程池与BeginInvoke()

    在WinForm中,很多情况下需要用到多线程,下面我来简单介绍一下多线程的基本用法. 1.线程.   (1)线程的初始化  Thread t = new Thread(new ThreadStart( ...

  10. React16+配置打包目录

    在学习react的时候,肯定最终都要用脚手架,对比了手写配置webpack(比较费劲).generator-react-webpack(打不开官方文档……),最终还是选择了react官方的create ...