`
leongod
  • 浏览: 63990 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sql复制表定义及复制数据行

阅读更多

sql复制表定义及复制数据行

一、复制表定义

假设我们有一个数据表Person,有Id,FirstName,LastName,Weight,Height5个列,表结构可以参考这一篇。现在我们想创建一个新表叫People,表结构和Person一模一样,也就是列名和数据类型都一致。我们可以通过复制Person表的结构而不是复制表中的记录来创建这个表,贴一下sql代码:

1、Sql Server

sql server使用带有不返回任何行的查询和INTO子句:

  SELECT
      Id,
      FirstName,
      LastName,
      Weight,
      Height
      INTO People
  FROM
      Person(NOLOCK)
      WHERE 1=0

当使用INTO命令来复制表时,查询所返回的行都会加入新生成的表People中(复制表数据见下二),除非我们在WHERE子句条件中定义一个恒为false的条件,即1=0。

还要注意,Person表的Id是自增的主键,但是复制后新建的People表的Id没有变成主键。

2、Oracle、MySql和PostgreSQL

  CREATE TABLE People 
  AS 
  SELECT
  Id,
  FirstName,
  LastName,
  Weight,
  Height
  FROM
  Person
  WHERE 1=0

查询部分以及查询条件和Sql Server蛮像的。

3、DB2

  CREATE TABLE People LIKE Person

SELECT什么的都是浮云,就是这么简洁。从这条语句可以认为IBM完胜MS,Oracle…….吗?

 

二、从一个表向另外的表复制行

还是以Person和People表来举例,假如Person和People表都已经存在,把Person表中Id小于10的人复制到People表中:

1、表结构完全相同

  INSERT INTO People
  (
      --Id,
      FirstName,
      LastName,
      Weight,
      Height
  )
  SELECT
      --Id,
      FirstName,
      LastName,
      Weight,
      Height
  FROM
      Person
      WHERE Id<10

INSERT INTO语句指定要插入的列,SELECT列的顺序和插入处写的列顺序要一致,如果没有指定则插入所有列。

当注意,当我把主键也选择的时候,Sql Server提示“当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'People' 中的标识列插入显式值”。

2、People表少一列

假设People少一列Weight,那么通过下面的sql语句

  INSERT INTO People
  (
      --Id,
      FirstName,
      LastName,
      --Weight,
      Height
  )
  SELECT
      --Id,
      FirstName,
      LastName,
      --Weight,
      Height
  FROM
      Person
      WHERE Id<10

插入数据正常。

3、People表多一列

假设People表多一列,用身高减去体重,叫做HWDiff,身高和体重是float类型,现在把HWDiff设计成int型,然后执行复制:

  INSERT INTO People
  (
      --Id,
      FirstName,
      LastName,
      Weight,
      Height,
      HWDiff
  )
  SELECT
      --Id,
      FirstName,
      LastName,
      Weight,
      Height,
      Height-Weight AS HWDiff
  FROM
      Person
      WHERE Id<10

测试也通过了,这是因为float和int类型可以相互转换(之所以说是相互转换,您可以试着将Person表的Height和Weight设计成int型,而People表的对应列设计成float型,然后再复制试试看,都可以的),当然如果把HWDiff直接设计成float型,那最好了。从2和3可以说明,我们向目标表中只要插入的列和选择的列完全一致,表结构不完全一样也可以正常复制。

分享到:
评论

相关推荐

    DB2 SQL复制详细手册

    DB2 SQL复制是一种高效的数据同步技术,用于在不同的DB2实例之间实现实时或近实时的数据复制。这个详细手册旨在帮助新手和经验丰富的DBA理解并配置DB2的SQL复制功能,即使没有深入的DB2知识也能按照指南操作。本文将...

    DB2数据库SQL复制过程参考

    ### DB2数据库SQL复制过程详解 #### 一、概述 本文档主要介绍DB2数据库的SQL复制过程,包括从创建数据库到配置复制环境的具体步骤。本文档基于DB2 v9.1版本,并在Windows XP环境下进行测试。通过本文档的学习,读者...

    sqlA库某表到B库某表同步

    总结,"sqlA库某表到B库某表同步"涉及的是SQL Server的复制技术,用于保持多个数据库间的数据一致性。配合有效的备份策略,可以保证数据的安全性和高可用性。具体的配置步骤和细节通常会在类似"SQL2005配置复制定...

    sql视图复制工具

    在SQL数据库管理中,视图(View)是一种虚拟表,它并不存储数据,而是基于一个或多个表的查询结果。视图的创建是为了提供数据的另一种访问方式,它可以简化复杂的查询,隐藏敏感信息,或者聚合来自不同表的数据。在...

    sql学习 合并重复行 定义新的列为其添加数据 新组成的表安某字段排序 分页语句

    如果需要创建一个新表,并且只想复制原表的结构而不复制数据,可以使用以下方法: 示例代码: ```sql -- 示例7:只复制表结构 CREATE TABLE new_table_name AS SELECT * FROM original_table_name WHERE 1=0; -- ...

    MS SQL 2000利用数据库复制技术 实现数据同步更新

    3. 订阅服务器:订阅服务器接收复制数据。它们可以选择性地订阅发布,并且根据复制类型和选项,也可能将更改回传给发布服务器或重新发布到其他订阅服务器。 4. 发布:发布是数据库中一组要复制的项目集合。这允许...

    sql数据同步复制学习

    ### SQL 数据同步复制学习 #### 关于 SQL 2000 与 SQL 2005 之间的数据库发布和订阅操作说明 在企业级应用环境中,数据同步与复制是一项非常重要的技术,它能够确保不同数据库系统之间数据的一致性和准确性。SQL ...

    数据中心SQL复制方案.docx

    数据中心SQL复制方案是一种高效的数据同步方法,用于在不同的SQL Server实例之间实时或近实时地传输和更新数据。这种方案在大型企业或复杂IT环境中尤为重要,因为它确保了数据的一致性和可用性,即使在多数据中心的...

    SQL_Server数据与Excel表的导入导出

    ### SQL Server 数据与 Excel 表的导入导出详解 #### 一、概述 在数据库管理领域,数据导入导出是一项非常重要的技能。无论是为了合并数据、归档还是数据分析,甚至是开发应用程序或升级数据库,数据迁移都是必不...

    如何在两个SQLSERVER之间数据同步

    本文将详细介绍如何通过SQL Server的复制技术实现在两个SQL Server实例之间的数据同步。 #### SQL Server 数据同步概述 数据同步是在两个或多个数据库之间保持数据一致性的过程。对于SQL Server而言,其提供了多种...

    生成提取表中数据的sql脚本

    - 最终将生成一个SQL脚本,其中包含一系列`INSERT`语句,用于将源表中的数据复制到另一个地方。 ### 总结 本文通过分析提供的存储过程代码,详细介绍了如何生成一个用于从SQL Server表中提取数据的SQL脚本。这种...

    两台SQL-Server数据同步解决方案

    通过对SQL Server复制机制的理解及实施步骤的学习,我们可以有效地实现两台SQL Server之间的数据同步。无论是选择快照复制、事务复制还是合并复制,都能根据实际应用场景的需求灵活配置。此外,通过手动同步方案,也...

    SQL2008数据同步

    例如,可以选择只复制某些表,或者使用触发器和代理来确保数据的一致性。 2. **定义订阅**:创建了发布后,需要定义订阅。这包括选择订阅类型(推送订阅或拉取订阅)、指定订阅服务器以及定义订阅数据的初始同步...

    C#编写的SQL数据表提取器

    【C#编写的SQL数据表提取器】是一个利用C#编程语言在Visual Studio 2005环境下开发的工具,其主要目标是提供对SQL Server 2000数据库的一系列便捷操作。这个程序旨在帮助用户高效地管理他们的数据库,执行常见的...

    SQL 2000 同步复制操作详解

    SQL 2000的同步复制操作是一种数据库管理和数据分发技术,主要用于在多个数据库之间保持数据的一致性。此技术对于大型企业或分布式系统来说至关重要,因为它允许数据在不同的服务器间实时或按需更新,确保所有节点上...

    实例Sql server 2005订阅复制同步分发数据到多台服务器

    SQL Server 2005的订阅复制同步功能是一种强大的数据分发机制,它允许数据从一个或多个发布服务器分发到多个订阅服务器,以实现数据的实时或定期更新,确保多台服务器间的数据一致性。在本实例中,我们将探讨如何...

    SqlServer数据库OGG安装部署及数据初始化.docx

    Oracle GoldenGate 是一款高效的数据复制工具,用于实现不同数据库之间的实时数据同步。在这个场景中,我们关注的是如何在SQL Server数据库环境下安装配置Oracle GoldenGate(OGG),并将数据从SQL Server实时同步到...

    Mssql 复制表结构 表数据.docx

    - 如果表包含标识列,复制数据后可能需要重置标识种子,以避免冲突。可以使用`DBCC CHECKIDENT`命令来实现。 - 确保处理好约束、索引和触发器。默认情况下,复制不会保留这些元素,可能需要手动创建。 - 当涉及...

    SQL Server2000 同步复制技术实现步骤

    - **创建发布**:在发布服务器上选择要复制的数据库对象,定义复制范围和属性。 - **创建订阅**:在订阅服务器上指定要接收哪些发布,可以是推送订阅(由发布服务器推送数据)或拉取订阅(订阅服务器主动请求数据...

Global site tag (gtag.js) - Google Analytics