我有一个创建临时表的查询,并在查询的后续部分使用此表。我运行了查询的第一部分,它只是创建表来查看结果。我得到了以下结果:
查询已完成但有错误:
(166166381 row(s) affected)
Msg 9002, Level 17, State 4, Line 3
The transaction log for database 'tempdb' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
Msg 9002, Level 17, State 4, Line 2
The transaction log for database 'tempdb' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
所以它创建了(大量)表,但是给了我一个错误,表明tempdb的事务日志已满。
此错误是否导致显示的表出现问题(因为可能没有回放所有行)或者我可以使用此表吗?我查看了删除此错误的提示,但是当我查看tempdb属性时,它说我没有权限,所以我不确定采取哪些步骤来处理错误。
这是代码。由于某种原因,我似乎无法将其格式化为适合代码框
SELECT Cast(Datamart_Timestamp AS DATETIME) AS Datamart_Timestamp
,Contract_ID
,Admin_System
,Contract_Status_Code
,Cast(Contract_Status_Effective_Date AS DATETIME) AS Contract_Status_Effective_Date
INTO ##Contract_Status
FROM AV_TLA_Contract_Status AS CS
WHERE (Datamart_Timestamp < '4/1/2011');
GO
-- //////////////////////////////////////////////////////////////////////////////////
INSERT INTO ##Contract_Status
SELECT CAST(CS.Datamart_Timestamp AS DATETIME) AS Datamart_Timestamp
,CS.Contract_ID
,CS.Admin_System
,CS.Contract_Status_Code
,CAST(CS.Contract_Status_Effective_Date AS DATETIME) AS Contract_Status_Effective_Date
FROM AV_TLA_Contract_Status AS CS
LEFT OUTER JOIN AT_AHEV_2011_04_Contract_Status AS A
ON CS.Contract_ID = A.Contract_ID
WHERE (CS.Contract_ID IS NOT NULL)
AND (A.Contract_ID IS NULL)
AND (CS.Datamart_Timestamp > '3/31/2011'); --Update so only most recent months are used.
答案 0 :(得分:1)
不要看到使用您创建的临时表的任何问题。我相信,在用166166381 rows
创建临时表之后,事务日志空间被填满,因此抛出了消息,这意味着将来创建临时表。
答案 1 :(得分:0)
您肯定可以使用该表,但是当您收到日志完整消息时,它表示需要记录未能记录的任何活动,因此要么已回滚,要么已取消。所以,你的桌子就在那里,但你很可能会错过一堆必要的更改和/或数据。
关于如何处理错误,您有两种选择:
由于您没有权限修改tempdb,我猜是它是一个共享数据库,并且DBA 不为您增长日志,dba会说做#2。< / p>