3
我有一個父/子表設置 - Items/ItemDetails。這部分工作:ServiceStack.OrmLite在SQL.In中使用限制過濾器
var q = db.From<Item>(); //various where clauses based on request
items = db.Select<Item>(q);
q = q.Select(a => a.ITEM_NO);
itemDetails = db.Select<ItemDetail>(x => Sql.In(x.ITEM_NO, q));
嘗試添加分頁改善,我遇到麻煩.Limit(跳過行)函數在SQL.In聲明來解決這個要求對於大數據集的性能的子表。
var q = db.From<Item>().Limit(skip, rows);
items = db.Select<Item>(q);
q = q.Select(a => a.ITEM_NO);
itemDetails = db.Select<ItemDetail>(x => Sql.In(x.ITEM_NO, q));
它工作在第一選擇限制的結果時,但在子數據中使用時拉我得到「只有一個表達式可以在選擇列表中指定時不引入子查詢與存在。」
散發出來改變其中子查詢的SQL:
WHERE "ITEM_NO" IN (SELECT * FROM (SELECT "ITEM_NO", ROW_NUMBER() OVER
(ORDER BY "ITEM"."ITEM_NO") As RowNum
FROM "ITEM") AS RowConstrainedResult WHERE RowNum > 5 AND RowNum <= 15)
我理解的SQL錯誤是因爲我IN子句中選擇多個列。有沒有更好的方式來寫這個來避免錯誤?
感謝
我們仍然有尚未升級到2008 R2以上的舊用戶。 – Mark