sql - 复制,将大量行插入表中

标签 sql sql-server t-sql

我必须将超过 100 万行从一个表复制到另一个表。因为我们有超过 50 个数据库需要更新,所以我使用一个小型 php 程序来启动每个数据库的事务。但是,当我只是在一个数据库上进行测试时,我注意到如果我使用“插入选择”语句,服务器只会复制大约 10000 行,然后突然停止?

我们正在对数据库进行大修,我们创建了一个包含多个更新和插入查询的事务来完成这项工作,事务中的所有其他查询都已完成。但批量插入不是???即使在批量插入之后仍然有一些其他的 tsql 操作??

我使用以下 tsql 脚本作为事务的一部分:

INSERT INTO [dbo].[tbl_SystemStatistics] ( 40 column)  
SELECT 40 column 
FROM [dbo].[tbl_SystemStatisticsOverhaul]

最佳答案

尝试这样的事情 -

SET NOCOUNT ON;

DECLARE 
      @x INT
    , @count INT

SELECT 
      @count = COUNT(1)
    , @x = 1 
FROM dbo.tbl_SystemStatisticsOverhaul

IF EXISTS(
    SELECT 1
    FROM tempdb.dbo.sysobjects
    WHERE ID = OBJECT_ID('tempdb..#import')
) DROP TABLE #import;

SELECT [column], RowNumber = ROW_NUMBER() OVER (ORDER BY id)
INTO #import
FROM dbo.tbl_SystemStatisticsOverhaul

WHILE @x < @count BEGIN

    INSERT INTO dbo.tbl_SystemStatistics ([column])  
    SELECT [column]
    FROM #import 
    WHERE RowNumber BETWEEN @x AND @x + 9

    SELECT @x = @x + 10

END

关于sql - 复制,将大量行插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16227392/

相关文章:

sql - 将 SQL Server 中的字符串更改为缩写

sql - 无法修复此查询中从 varchar 到 int 的类型转换问题,我写道

sql - 表名和循环描述

sql-server - SQL Server 2012 : Running multiple UPDATE FROM SELECT on the same table simultaneously

c# - 将密码散列到 SqlServer

sql - T-SQL。实现 "any"where 语句的最佳方法是什么

SQL查询根据列名获取表名和行数”

mysql - 从 MySQL 报告中排除临时列

PHP 工作但给出 sql SYNTAX 错误

java - 如何通过 hibernate 从多表查询中获取数据?