
我有一个对象,让我们称之为permit,它有一个ID引用表的ID列表,让我们在另一个数据库中调用那些任务.
我正在尝试运行以下查询:
var listofUsedIDs = select taskID from Permit_Task;Select * from task where ID not in (listofUsedIDs)
当我运行此代码时,我收到错误:
The incoming tabular data stream (TDS) remote procedure call (RPC)
protocol stream is incorrect.
Too many parameters were provIDed in this RPC request. The maximum
is 2100.
我无法运行子选择或任何事情因为NHibernate不允许我在两个数据库上执行此 *** 作.
任何人都可以帮我解决这个问题吗?
解决方法using (var tx = session.BeginTransaction()){ session.Createsqlquery("CREATE TEMP table usedIDs (ID INT)").ExecuteUpdate(); for (int index = 0; index < IDs.Length; index++) { // Todo: batch this session.Createsqlquery("INSERT INTO usedIDs VALUES (:p" + index + ")") .SetParameter("p" + index,ID) .ExecuteUpdate(); } session.Createsqlquery("CREATE INDEX usedIDs_IDx ON usedIDs (ID)").ExecuteUpdate(); Batch batch; while((batch.List = session.Createsqlquery("SELECT ID FROM tasks t WHERE 1 = (SELECT COUNT(*) FROM usedIDs u WHERE u.ID = t.ID) liMIT 10 OFFSET " + batch.Number).List<int>()).Count > 0) { var tasks = session.queryOver<Task>() .Where(t => t.ID.IsIn(batch)) .List(); // Do something with the tasks } tx.Commit();} 要么
public TaskMap(){ Map(x => x.IsUsedCount).Formula("SELECT (SELECT COUNT(*) FROM usedIDs u WHERE u.ID = ID)").LazyLoad();}var tasks = session.queryOver<Task>() .Where(t => t.IsUsedCount == 0) .List(); 总结 以上是内存溢出为你收集整理的c# – 从数据库中选择不在大型集合中的id,提供的参数太多全部内容,希望文章能够帮你解决c# – 从数据库中选择不在大型集合中的id,提供的参数太多所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)