【问题标题】:How can paging be supported when the sort order has to be culture specific?当排序顺序必须是特定于文化的时,如何支持分页?
【发布时间】:2019-09-21 03:32:25
【问题描述】:

我们使用 _SC 排序规则将 SQL Server 2016 作为应用程序的后端。应用程序本身是“区域感知的”并支持在多个区域中操作的客户。因此,数据库中的数据可以是“任何语言”。请求根据整个结果集中的用户区域设置按排序顺序对 UI 中显示的数据进行分页。团队不是将整个结果集传递给更高层并让他们进行分页,而是评估

  1. 将文化从 UI 层传递到不同的层,一直到数据库,
  2. 将区域性映射到 SQL Server 上的特定排序规则,然后
  3. 具有基于此映射排序规则的 SQL Server 排序和页面。 有没有更好的方法来做到这一点,或者这不是一个好主意,我们最好让更高层负责分页?根据我们的指导方针,数据库中禁止排序,但我想这是应该放宽这些指导方针的一个用例。

我研究了Does Microsoft SQL Server support localized name sorting?https://social.technet.microsoft.com/wiki/contents/articles/31194.t-sql-sort-data-by-multiple-languages.aspx,这个概念是这两种方法的“联合”

【问题讨论】:

  • 第2步不清楚:你是一直只想根据用户的locale排序规则,还是想根据用户的locale自定义排序规则?示例可能会有所帮助。
  • 好消息:无论您选择哪种解决方案,性能都会下降,因为没有任何层(包括数据库)可以通过这种方式有效地使用索引,因此您可以做任何最方便的事情。请注意,虽然不传递整个结果集确实可以改善问题,但您仍然会让 SQL Server 落后,以便根据用户这次想要的任何内容对整个表进行排序。祈祷他们实际上不会在页面上来回走动太多。
  • @TabAlleman,我们希望根据用户区域设置的排序规则进行排序。我们还没有考虑自定义排序...你能澄清一下什么时候起作用吗?
  • @Jeroen Mostert,我明白有些或其他层必须付费。 “直觉”是在 SQL Server 上执行此操作会更便宜。在测试这个理论之前,我想检查一下社区是否有强烈的反对意见。

标签: sql-server paging


【解决方案1】:

数据库将做最好的排序工作,所以将其传递下去。任何其他方法都将涉及将所有结果返回到中间层,因此 I 术语或资源非常昂贵,并重新发明了 DB 旨在做的事情。

如果您的指南建议不要使用数据库对您的指南进行排序。这简直是​​愚蠢的。

【讨论】:

  • 一些不幸的 ASP.NET 书籍展示了读取整个数据集以及在内存中进行排序和分页的示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 2012-02-01
  • 2011-03-02
  • 2011-10-22
  • 2018-03-28
  • 2011-02-21
  • 1970-01-01
相关资源
最近更新 更多