我有一个奇怪的问题,我正在尝试将一些数据加载到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个单独的查询运行。
感谢。
答案 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