SQL Server - INSERT INTO覆盖现有数据

时间:2017-07-24 23:27:02

标签: sql sql-server

我有一个奇怪的问题,我正在尝试将一些数据加载到SQL Server中的新表中。该表自2015年至今已有数百万条记录。当我尝试加载整个数据时,它会在停止之前运行大约2小时并抛出错误

  

交易记录 - 完整。

所以我要做的就是在WHERE子句中将时间框架分为两部分 YEAR >= 2016并插入值,然后将INSERT语句修改为 YEAR >= 2015 AND YEAR < 2016。当我运行它时,它会覆盖现有的2016年数据,但不会覆盖2017年的数据。所以基本上整个2016年都没有回报

我错过了什么吗?

真的很烦人,因为我最后花了几个小时才加载数据。

代码

INSERT INTO <tablename>
    SELECT * 
    FROM 
        (SELECT <columnnames> 
         FROM <few join statements> 
         WHERE <calendaryear >= 2016
         GROUP BY <statements>) a -- this loads data from 2016 to present.

INSERT INTO <tablename>
    SELECT * 
    FROM 
        (SELECT <columnnames> 
         FROM <few join statements> 
         WHERE <calendaryear >= 2015 AND calendaryear < 2016 
    GROUP BY <statements>) a --this loads data from 2015 to 2016

执行第二个语句后,前一个语句被覆盖。在这里,我显示了2个单独的查询,但实际上我只是注释掉了日历语句并作为2个单独的查询运行。

感谢。

3 个答案:

答案 0 :(得分:0)

以前的陈述是否有可能永远不会被提交?在第二个语句之前发生了回滚吗?

答案 1 :(得分:0)

我使用SQL Server已经有几年了,但我相信命令BCP(批量加载)会绕过日志。你不应该需要DBA。

答案 2 :(得分:0)

尝试以下方法:

USE [YOUR_DB]
GO

SELECT log_reuse_wait,log_reuse_wait_desc from sys.database

这应该可以为您提供日志文件填写原因的线索。

https://msdn.microsoft.com/en-us/library/ms345414(v=sql.105).aspx