我正在使用Microsoft SQL Server 2014,尝试创建临时表时遇到了一些问题。我之前已经运行过此代码一次,没有任何问题,但是当我今天尝试运行查询时,我收到了以下两个错误之一:“数据库中已经有一个名为'#AllClasses'的对象”或“数据库的事务日志”由于“ACTIVE_TRANSACTION”,“tempdb”已满。”我粘贴了下面的代码的一部分:
CREATE TABLE #AllClasses(studentId uniqueidentifier, ClassName nvarchar(100), SchoolName nvarchar(100), AcademicYearId uniqueidentifier, UserGroupId uniqueidentifier, SchoolId uniqueidentifier, ClassId uniqueidentifier, UserGroupOrganizationStatusId tinyint);
CREATE UNIQUE INDEX #I_AllClasses ON #AllClasses (StudentId, UserGroupId);
INSERT #AllClasses(studentId, ClassName, SchoolName, AcademicYearId, UserGroupId, SchoolId, sc.ClassId, u.UserGroupOrganizationStatusId)
SELECT sc.studentId, c.ClassName, u.UserGroupOrganizationName, c.AcademicYearId, c.UserGroupId, c.SchoolId, sc.ClassId, u.UserGroupOrganizationStatusId
FROM StudentClassCrossReference sc
INNER JOIN class c ON sc.ClassId = c.classId
INNER JOIN School s ON s.SchoolId = c.SchoolId
INNER JOIN dbo.UserGroupOrganization u ON u.UserGroupOrganizationId = s.UserGroupOrganizationId
GROUP BY sc.studentId, c.classname, u.UserGroupOrganizationName, u.UserGroupOrganizationId, c.AcademicYearId, c.UserGroupId, c.SchoolId, sc.ClassId, u.UserGroupOrganizationStatusId
HAVING u.UserGroupOrganizationStatusId = 0
当我尝试删除表时,出现一个新错误,提示“无法删除表'#All Classes',因为它不存在或您没有权限。”
DROP Table #LS25Student, #AllClasses, #LS25PageSession, #LS25PsByClass
当我尝试使用IF语句删除表时,收到错误消息“由于'ACTIVE_TRANSACTION','tempdb'的事务日志已满”。
IF OBJECT_ID('tempdb.dbo.#AllClasses', 'U') IS NOT NULL
DROP TABLE #AllClasses;
IF OBJECT_ID('tempdb.dbo.#LS25Student', 'U') IS NOT NULL
DROP TABLE #LS25Student;
IF OBJECT_ID('tempdb.dbo.#LS25PageSession', 'U') IS NOT NULL
DROP TABLE #LS25PageSession;
IF OBJECT_ID('tempdb.dbo.#LS25PsByClass', 'U') IS NOT NULL
DROP TABLE #LS25PsByClass;
我能够运行其他查询而不会出现问题。任何解决此特定查询的建议将不胜感激。
最佳答案
您可以使用简单的SELECT * FROM tempdb..sysobjects WHERE name LIKE '%AllClasses%'
搜索所有临时对象
要修复它,只需运行一次:
BEGIN TRANSACTION
DROP TABLE #AllClasses
COMMIT TRANSACTION
如果仍然无法删除它,只需使用
SELECT * FROM sys.dm_exec_sessions
检查僵尸 session 并使用KILL session_id
杀死它。关于sql - 由于 'tempdb',数据库 'ACTIVE_TRANSACTION'的事务日志已满,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45290016/