Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 不调用数据库对表进行排序_Sql_Sql Server_Asp Classic - Fatal编程技术网

Sql 不调用数据库对表进行排序

Sql 不调用数据库对表进行排序,sql,sql-server,asp-classic,Sql,Sql Server,Asp Classic,我正在开发一个遗留系统经典ASP,其中原始代码将根据用户输入执行一个在线动态查询,以确定排序顺序。例如: Dim query = "Select * from empTable order by " & //some user input 除了潜在的SQL注入之外,这种方法的另一个问题是,每次用户想要对结果进行排序时,它都会调用数据库。因此——我的老板声称——会导致一些性能问题 我建议使用数组存储查询返回的结果,然后在数组中排序,但管理层未批准,我不知道原因。我也不能使用Javascr

我正在开发一个遗留系统经典ASP,其中原始代码将根据用户输入执行一个在线动态查询,以确定排序顺序。例如:

Dim query = "Select * from empTable order by " & //some user input
除了潜在的SQL注入之外,这种方法的另一个问题是,每次用户想要对结果进行排序时,它都会调用数据库。因此——我的老板声称——会导致一些性能问题

我建议使用数组存储查询返回的结果,然后在数组中排序,但管理层未批准,我不知道原因。我也不能使用Javascript。我的主管让我研究XML元素。因此,我的问题是:

XML如何帮助排序结果而不调用数据库? 如果没有,我的其他选择是什么? 编辑:所以根据我的主管,调用IIS服务器是可以的,但是调用数据库服务器是不可接受的


可以将样式应用于XML元素

w3schools.com上的类似内容:

<xsl:template match="/">
  <html>
  <body>
  <h2>My CD Collection</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th>Title</th>
      <th>Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd">
      <xsl:sort select="artist"/>
      <tr>
        <td><xsl:value-of select="title"/></td>
        <td><xsl:value-of select="artist"/></td>
      </tr>
    </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>
供参考: 数组不支持排序。
您应该使用一个集合实现

如果结果都显示在一个页面上,那么使用JavaScript在客户端对结果进行重新排序是理想的,但是您提到JavaScript是不允许的

因此,如果您不能使用JavaScript,也不能进行另一个数据库调用,那么您唯一的选择就是将结果存储在某个位置,以便在服务器端重新排序

选项1:您可以将结果存储为某种格式,可能是JSON?在一个隐藏字段中,并将其发回服务器进行重新排序,然后重新显示

选项2:您可以将结果以某种格式存储,可能是服务器端会话变量中的数组。或者,您也可以将其以某种可能的XML格式本地存储在文件系统中

选项3:将结果输出到XML文件,并使用XSL对输出进行样式设置和排序

对于选项1和2,您将需要编写一些代码来在经典ASP中进行排序。希望您的订单只在一个领域

如果要存储大量数据,选项1可能会使页面呈现和回发速度非常慢

如果要存储大量数据且有许多人使用该页面,选项2可能会对服务器的内存造成很大的需求,并影响性能

由于选项1和2都需要对结果进行服务器端排序,这也可能会影响服务器性能

选项3根本不会对用户友好,但我不知道您有什么类型的用户


数据库通常是进行此操作的最佳位置。如果存在性能问题,那么您/他们可能应该考虑索引或数据库结构的改进。

老实说,我不知道您的老板在想什么。性能问题通常在数据库中充满查询时发生,例如,从嵌套循环中运行查询或没有索引。每重新加载一个页面运行一个额外的查询与单独产生影响非常不同。此外,您计划将阵列存储在哪里?同样,我无法理解我的老板在想什么。我告诉她,最好的解决方案是将所有内容都放在存储过程中,并使用CASE语句确定排序顺序;在第二个问题上,要考虑的一个选项是使用一个断开的记录集。这里有一个可能有用的问题/答案:我不熟悉XML/XSL。这是否意味着我将返回查询结果并将其存储在集合中,然后在集合中进行排序?这会消除每次我需要排序时调用数据库的需要吗?你的老板告诉你使用XML/XSLT对页面上的结果进行排序。不,她让我研究XML/XSL是否可以消除调用数据库进行排序的需要。据我所知,管理层不希望你更改代码。尝试使用样式表对页面上的结果进行排序。