Select 无法对大小为8130的行进行排序,该行大于允许的最大值8094
当我尝试执行查询时,它会导致以下错误Select 无法对大小为8130的行进行排序,该行大于允许的最大值8094,select,sql-server-2000,query-optimization,Select,Sql Server 2000,Query Optimization,当我尝试执行查询时,它会导致以下错误 SELECT DISTINCT tblJobReq.JobReqId , tblJobReq.JobStatusId , tblJobClass.JobClassId , tblJobClass.Title , tblJobReq.JobClassSubTitle , tblJobAnnouncement.JobClas
SELECT DISTINCT tblJobReq.JobReqId
, tblJobReq.JobStatusId
, tblJobClass.JobClassId
, tblJobClass.Title
, tblJobReq.JobClassSubTitle
, tblJobAnnouncement.JobClassDesc
, tblJobAnnouncement.EndDate
, blJobAnnouncement.AgencyMktgVerbage
, tblJobAnnouncement.SpecInfo
, tblJobAnnouncement.Benefits
, tblSalary.MinRateSal
, tblSalary.MaxRateSal
, tblSalary.MinRateHour
, tblSalary.MaxRateHour
, tblJobClass.StatementEval
, tblJobReq.ApprovalDate
, tblJobReq.RecruiterId
, tblJobReq.AgencyId
FROM ((tblJobReq
LEFT JOIN tblJobAnnouncement ON tblJobReq.JobReqId = tblJobAnnouncement.JobReqId)
INNER JOIN tblJobClass ON tblJobReq.JobClassId = tblJobClass.JobClassId)
LEFT JOIN tblSalary ON tblJobClass.SalaryCode = tblSalary.SalaryCode
WHERE (tblJobReq.JobClassId in (SELECT JobClassId
from tblJobClass
WHERE tblJobClass.Title like '%Family Therapist%'))
我检查了一下,没有找到任何解决办法。唯一的方法是截断(substring())查询中的“tblJobAnnouncement.JobClassDesc”,该查询的列大小约为8000
我们是否有任何解决方法,以便我不需要截断这些值。或者可以优化此查询?SQL Server 2000中是否有任何设置?SQL需要排序的[不明显]原因是DISTINCT关键字 根据数据和底层表结构的不同,您可能能够消除这种差异,因此不会触发此错误 您很容易找到另一种解决方案,即截断选择列表中的一些字段 编辑:回答“您能解释一下原因有多明显吗?”
一般来说,满足不同要求的方式因时间而异
- 数据上下文(预期行数、是否存在索引、行大小…)
- SQL实现的版本/品牌(查询优化器尤其会在每个新版本中接收新的或修改过的启发式,有时会在不同上下文中为各种构造生成备用查询计划)
底线:DISTINCT意味着某种排序。
在问题的特定情况下,SQL Server报告的错误和阻止查询完成的错误是“在大于…的行上不可能排序”,并且DISTINCT关键字是查询需要任何排序的唯一明显原因(顺便说一句,许多其他SQL构造意味着排序:例如UNION)因此,需要删除DISTINCT(如果逻辑上可能)。
事实上,出于测试目的,您应该删除它,以断言在没有DISTINCT的情况下,查询完成OK(如果只包含一些重复项)。一旦这一事实得到确认,并且如果查询能够有效地生成重复的行,那么就研究如何在不使用DISTINCT关键字的情况下生成重复的自由查询;涉及子查询的构造有时可用于此目的
一个不相关的提示是使用表别名,使用短字符串避免重复这些长表名。例如(只做了几张桌子,但你明白了…)
SQL需要排序的[不明显]原因是DISTINCT关键字 根据数据和底层表结构的不同,您可能能够消除这种差异,因此不会触发此错误 您很容易找到另一种解决方案,即截断选择列表中的一些字段 编辑:回答“您能解释一下原因有多明显吗?”
一般来说,满足不同要求的方式因时间而异
- 数据上下文(预期行数、是否存在索引、行大小…)
- SQL实现的版本/品牌(查询优化器尤其会在每个新版本中接收新的或修改过的启发式,有时会在不同上下文中为各种构造生成备用查询计划)
底线:DISTINCT意味着某种排序。
在问题的特定情况下,SQL Server报告的错误和阻止查询完成的错误是“在大于…的行上不可能排序”,并且DISTINCT关键字是查询需要任何排序的唯一明显原因(顺便说一句,许多其他SQL构造意味着排序:例如UNION)因此,需要删除DISTINCT(如果逻辑上可能)。
事实上,出于测试目的,您应该删除它,以断言在没有DISTINCT的情况下,查询完成OK(如果只包含一些重复项)。一旦这一事实得到确认,并且如果查询能够有效地生成重复的行,那么就研究如何在不使用DISTINCT关键字的情况下生成重复的自由查询;涉及子查询的构造有时可用于此目的
一个不相关的提示是使用tab
Cannot sort a row of size 8130, which is greater than the allowable maximum of 8094
SELECT DISTINCT JR.JobReqId, JR.JobStatusId,
tblJobClass.JobClassId, tblJobClass.Title,
JR.JobClassSubTitle, JA.JobClassDesc, JA.EndDate, JA.AgencyMktgVerbage,
JA.SpecInfo, JA.Benefits,
S.MinRateSal, S.MaxRateSal, S.MinRateHour, S.MaxRateHour,
tblJobClass.StatementEval,
JR.ApprovalDate, JR.RecruiterId, JR.AgencyId
FROM (
(tblJobReq AS JR
LEFT JOIN tblJobAnnouncement AS JA ON JR.JobReqId = JA.JobReqId)
INNER JOIN tblJobClass ON tblJobReq.JobClassId = tblJobClass.JobClassId)
LEFT JOIN tblSalary AS S ON tblJobClass.SalaryCode = S.SalaryCode
WHERE (JR.JobClassId in
(SELECT JobClassId from tblJobClass
WHERE tblJobClass.Title like '%Family Therapist%'))
DBCC CLEANTABLE (0,[dbo.TableName])
SELECT ID, ColumnA, ColumnB FROM TableA JOIN TableB
SELECT ID, ColumnC, ColumnD FROM TableA JOIN TableB
SELECT LEFT(LongColumn,2000)...
SELECT ColumnA, ColumnB, --IDColumnNotUsedInOutput
FROM TableA