首页 > 数据库 >sql server 大数据复制到另一张表

sql server 大数据复制到另一张表

时间:2023-07-22 16:08:07浏览次数:31  
标签:复制到 INSERT -- INTO 表中 server sql 数据 SourceTable

SQL Server 大数据复制到另一张表

在日常的数据库操作中,我们经常需要将一个表中的数据复制到另一个表中,这在数据分析、数据备份等场景下非常常见。本文将介绍如何使用 SQL Server 将一个表中的大量数据复制到另一个表中,同时提供相应的代码示例。

1. 创建目标表

首先,我们需要在数据库中创建一个目标表,用于存储要复制的数据。

CREATE TABLE DestinationTable (
    ID INT PRIMARY KEY,
    Name VARCHAR(100),
    Age INT,
    Email VARCHAR(100)
);

上述代码创建了一个名为 DestinationTable 的表,包含了四个列:IDNameAgeEmail。其中,ID 列作为主键。

2. 复制数据

2.1 使用 INSERT INTO 语句

最简单的方法是使用 INSERT INTO 语句,将源表中的数据插入到目标表中。

INSERT INTO DestinationTable (ID, Name, Age, Email)
SELECT ID, Name, Age, Email
FROM SourceTable;

上述代码使用 INSERT INTO 语句将 SourceTable 中的数据插入到 DestinationTable 中。通过 SELECT 子句,我们可以指定要复制的列。

2.2 使用 SELECT INTO 语句

另一种方法是使用 SELECT INTO 语句,直接创建一个新的目标表,并将源表中的数据复制到新表中。

SELECT ID, Name, Age, Email
INTO DestinationTable
FROM SourceTable;

上述代码将 SourceTable 中的数据复制到一个新的 DestinationTable 中。

3. 处理大数据

如果需要处理大量数据,以上方法可能会导致性能问题或超出表空间限制。为了解决这个问题,我们可以使用以下方法。

3.1 使用分页查询

分页查询是一种将数据分成多个较小块进行处理的技术。我们可以使用 OFFSET 和 FETCH NEXT 语句来实现分页查询。

DECLARE @PageSize INT = 1000; -- 每页大小
DECLARE @PageNumber INT = 1; -- 起始页码

DECLARE @TotalRows INT; -- 总行数
DECLARE @TotalPages INT; -- 总页数

-- 获取总行数
SELECT @TotalRows = COUNT(*)
FROM SourceTable;

-- 计算总页数
SET @TotalPages = CEILING(CAST(@TotalRows AS DECIMAL) / @PageSize);

-- 逐页复制数据
WHILE @PageNumber <= @TotalPages
BEGIN
    INSERT INTO DestinationTable (ID, Name, Age, Email)
    SELECT ID, Name, Age, Email
    FROM (
        SELECT ROW_NUMBER() OVER (ORDER BY ID) AS RowNum, ID, Name, Age, Email
        FROM SourceTable
    ) AS SubQuery
    WHERE RowNum BETWEEN (@PageNumber - 1) * @PageSize + 1 AND @PageNumber * @PageSize;

    SET @PageNumber = @PageNumber + 1;
END

上述代码使用分页查询将 SourceTable 中的数据逐页复制到 DestinationTable 中。@PageSize 变量指定每页的大小,@PageNumber 变量指定起始页码。通过计算总行数和总页数,我们可以循环复制数据,并使用 ROW_NUMBER() 函数进行分页。

3.2 使用 BULK INSERT

对于非常大的数据集,我们可以使用 BULK INSERT 语句进行快速数据复制。BULK INSERT 语句可以高效地将数据从一个文件加载到表中。

首先,我们需要将源表中的数据导出为一个文件。

DECLARE @FilePath VARCHAR(100) = 'C:\data\SourceData.csv';

SELECT ID, Name, Age, Email
INTO OUTFILE @FilePath
FROM SourceTable;

上述代码将 SourceTable 中的数据导出为一个名为 SourceData.csv 的文件。

然后,我们可以使用 BULK INSERT 语句将文件中的数据加载到目标表中。

DECLARE @FilePath VARCHAR(100) = 'C:\data\SourceData.csv';

BULK INSERT DestinationTable
FROM @FilePath
WITH (
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    FIRSTROW = 2 -- 如果文件包含标题行,则从第二行开始导入数据
);
``

标签:复制到,INSERT,--,INTO,表中,server,sql,数据,SourceTable
From: https://blog.51cto.com/u_16175450/6816387

相关文章

  • spring batch 框架进行元数据管理表 mysql
    使用SpringBatch框架进行元数据管理表MySQL的实现1.简介在进行大规模数据处理时,SpringBatch框架是一个非常有用的工具。它提供了一个强大的批处理框架,可以轻松地处理大量的数据,并具备事务管理、监控、错误处理等功能。为了进行元数据管理,我们可以使用MySQL数据库来存储和管理S......
  • spark开启historyserver
    Spark开启HistoryServer简介在使用ApacheSpark进行大数据处理时,我们常常需要查看作业的执行历史和性能指标。Spark提供了一个称为HistoryServer的组件,它能够保存和展示Spark应用程序的执行历史数据。本文将介绍如何开启Spark的HistoryServer,并提供详细的步骤和代码示例。步......
  • SQL日期操作函数(CONCAT、DATE_FORMAT、LAST_DAY)
    获取某月底日期:SELECTLAST_DAY('2021-07-01')ASmonth_end_date;拼接年月格式:CONCAT(DATE_FORMAT(hp.planned_payment_date,'%Y-%m'),'-01')如果数据库内存的是2023-07-19经过处理后会变成:2023-07-01SELECTbp.UNIT_ID......
  • 修改MySQL读写模式
    修改MySQL读写模式MySQL是一个开源的关系型数据库管理系统,广泛应用于互联网应用和企业级应用中。在MySQL中,存在着读写模式的设置,可以根据实际需求来调整数据库的读写性能和一致性。本文将介绍如何修改MySQL的读写模式,并提供代码示例。1.了解MySQL读写模式在MySQL中,有两种常见的......
  • 写shell脚本一键编译安装MySQL
    一键编译安装MySQL的Shell脚本在Linux系统中,MySQL是一个非常常见的数据库管理系统。它提供了强大的功能和可靠的性能,因此在许多应用程序中被广泛使用。为了在Linux系统上运行MySQL,我们需要先进行编译安装。为了简化这个过程,我们可以编写一个Shell脚本来自动完成MySQL的编译和安装......
  • 在mysql底下导出表数据
    在MySQL数据库中导出表数据是一个常见的任务,它允许我们将表数据以可移植的方式保存到文件中,以便在需要时重新导入到数据库中。这对于数据备份、数据迁移和与其他数据库系统的交互非常有用。在MySQL中,我们可以使用mysqldump命令来导出表数据。这是一个命令行工具,可以在终端中使用。......
  • Postgresql日志归档、复制槽概念
    问题1数据日志什么时候归档?其实这个问题是比较需要明白的,到底日志在正常的情况下,什么时候才能归档,到底条件是什么,要开启postgresql的日志的归档的前提条件,主要需要配置1wal_level=replica(或logical)2archive_mode=on3archive_command='test!-......
  • sql数据库代码写在哪里?
    1、C#中如何用SQL语言创建数据库,把SQL语句写在哪?求大神指点2、sql数据库代码写在哪里?3、怎么用c#代码在sql中建立新的数据库C#中如何用SQL语言创建数据库,把SQL语句写在哪?求大神指点c在英文字母中读作“[si:]”。“c”是英语字母中的第三个字母,大写为“C”,小写为“c”......
  • MySQL之视图检查选项
    MySQL之视图检查选项视图的检查选项当使用WITHCHECKOPTION子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如插入,更新,删除,以使其符合视图的定义。MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,mysql提供了两个选项:CASC......
  • SQL注入之Oracle环境搭建
    SQL注入之Oracle环境搭建前言OracleDatabase,又名OracleRDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机......