SQL 语句的某些部分嵌套得太深。重写查询或将其分解为更小的查询[重复]

2024-02-22

我的 ASP.NET MVC Web 应用程序中有以下方法,并且我使用实体框架作为数据访问层:-

        public IEnumerable<AaaUserContactInfo> getcontactinfo(long[] id)
        {
var organizationsiteids = (from accountsitemapping in entities.AccountSiteMappings
where id.Any(accountid => accountsitemapping.ACCOUNTID == accountid)
select accountsitemapping.SITEID).ToList();

var usersdepts = from userdept in entities.UserDepartments
join deptdefinition in entities.DepartmentDefinitions on userdept.DEPTID equals deptdefinition.DEPTID

where organizationsiteids.Any(accountid => deptdefinition.SITEID == accountid)

var contactsinfos = from contactinfo in entities.AaaUserContactInfoes 
                                join userdept in usersdepts on  contactinfo.USER_ID equals userdept.USERID

                                 select contactinfo;

            return contactsinfos;

但如果记录数量很大,那么我会收到以下错误:-

SQL 语句的某些部分嵌套得太深。重写 查询或将其分解为更小的查询。描述:未处理 执行当前 Web 请求期间发生异常。 请查看堆栈跟踪以获取有关错误和的更多信息 它起源于代码的地方。

异常详细信息:System.Data.SqlClient.SqlException:某些部分 你的SQL语句嵌套得太深了。重写查询或破坏它 分解为更小的查询。

来源错误:

执行期间产生未处理的异常 当前的网络请求。有关原产地和地点的信息 可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[SqlException (0x80131904): SQL 语句的某些部分是嵌套的 太深了。重写查询或将其分解为更小的查询。]
System.Data.SqlClient.SqlConnection.OnError(SqlException异常, 布尔中断连接、操作1 wrapCloseInAction) +388
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +688
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4403
System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +82
System.Data.SqlClient.SqlDataReader.get_MetaData() +135
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +6665229
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) +6667096
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource
1个完成,Int32超时,Task&任务, 布尔异步写入)+577
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior runBehavior、布尔值 returnStream、字符串 方法)+107
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法)+288
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为)+180
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand 实体命令、CommandBehavior 行为)+689

如果返回的记录数很少,那么代码可以正常工作,那么可能会出现什么问题呢?


根据上面评论中提到的重复问题的答案,请尝试以下作为第一个查询的 where 子句,因为这很可能是造成所有麻烦的原因:

where id.Contains(accountsitemapping.ACCOUNTID)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL 语句的某些部分嵌套得太深。重写查询或将其分解为更小的查询[重复] 的相关文章

随机推荐