【发布时间】:2017-07-24 21:04:50
【问题描述】:
我使用的是 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;
我可以毫无问题地运行其他查询。任何解决此特定查询的建议将不胜感激。
【问题讨论】:
-
@GiulioCaccin 谢谢你的建议,但是我对事务日志进行了查询,用于 tempdb 的日志空间只有 31%。您提到的另一个询问也无法帮助我理解为什么我创建的临时对象拒绝被删除或创建。除非我从你的建议中遗漏了什么。
标签: sql sql-server