当前位置: 首页 > 面试题库 >

使用SQL筛选存储过程的结果

万俟穆冉
2023-03-14
问题内容

我已经查看了与该问题相关的Stack Overflow上的其他问题,但是似乎没有一个问题能清楚地回答这个问题。

我们有一个名为sp_who2的系统存储过程,该过程为服务器上所有正在运行的进程返回信息的结果集。我想过滤存储过程返回的数据;从概念上讲,我可能会这样做:

SELECT * FROM sp_who2
WHERE login='bmccormack'

但是,该方法不起作用。有什么好的做法可以实现查询存储过程的返回数据的目标,最好无需查看原始存储过程的代码并对其进行修改。


问题答案:

没有好的方法可以做到这一点。这是存储过程的限制。您的选择是:

  1. 将过程切换到用户定义的函数。如今,在世界各地,人们正在制作应作为功能的存储过程。这是一个教育问题。您的情况就是一个很好的例子。如果您的过程是UDF,则可以按照直觉上应该做到的方式执行以下操作:

    SELECT * FROM udf_who2()
    

    WHERE login=’bmccormack’

  2. 如果您真的无法触摸您的过程,并且 必须 在sql中完成此过程,那么您就必须变得时髦。制作另一个存储过程以包装原始过程。在新过程中,调用现有过程并将值放入临时表中,然后使用所需的过滤器对该表运行查询,然后将结果返回给外界。

从SQL Server
2005开始,用户定义的函数是封装数据检索的方式。存储过程以及视图是在特定情况下使用的专用工具。在合适的时间,它们都非常方便,但不是首选。有人可能会认为上面的示例(A)获取了函数的所有结果,然后(B)对该结果集进行了筛选,例如子查询。
事实并非如此 。SQL Server 2005+优化了该查询;如果上有索引login,则在查询执行计划中看不到表扫描;非常有效。

编辑 :我应该补充一点,UDF的内幕类似于SP的内幕。如果它与您要避免的SP的 逻辑
混淆,您仍然可以将其更改为函数。几次,我采用了我不想理解的大型,可怕的过程代码,并将其成功地转移到函数中。唯一的问题是,除了返回结果外,该过程是否还进行了其他任何
修改 ;UDF无法修改数据库中的数据。



 类似资料:
  • 本文向大家介绍SQL SERVER调用存储过程小结,包括了SQL SERVER调用存储过程小结的使用技巧和注意事项,需要的朋友参考一下 在SQL Server数据库的维护或者Web开发中,有时需要在存储过程或者作业等其他数据库操作中调用其它的存储过程,下面介绍其调用的方法 一、SQL SERVER中调用不带输出参数的存储过程 SQL 代码 二、SQL SERVER中调用带输出参数的存储过程 SQL

  • 问题内容: 我有一个MYSQL存储过程SP1(),它返回一个结果集。 我想在SP2()内部调用SP1()并遍历SP1()的结果集以执行一些其他工作。 我不想从SP1()中包含我的逻辑,因为这会使SP2()过于复杂。 有什么建议么? 谢谢。 问题答案: 您想做的事情听起来并不是特别好,也许您应该考虑重新设计这两个过程。但是,您可以执行以下操作来快速解决此问题: 使您的sp2 sproc将其中间结果写

  • 问题内容: 是否可以在另一个存储过程中使用一个存储过程的结果? IE 我尝试使用,但无法在嵌套语句中调用。 有什么办法可以做到这一点?环境是SQL Server 2008。 问题答案: 您最多可以嵌套32个级别的存储过程。 我建议阅读这篇有关INSERT- EXEC的文章。这是一个摘录: 如果some_sp尝试使用INSERT-EXEC调用some_other_sp,您将收到一条错误消息。因此,一

  • 主要内容:示例Transact SQL 中的存储过程用于一次又一次地节省编写代码的时间。它通过将过程存储在数据库中并通过传递参数来获得所需的输出来实现这一点。 语法: 下面是存储过程创建的语法 - 参数可选:当我们创建一个过程时,一个或多个参数被传递到过程中。存储过程中有3种类型的参数: IN - 过程可以引用参数。该过程将覆盖参数的值。 OUT- 过程不能引用参数,但过程会覆盖参数值。 IN OUT- 参数被

  • SQL Server存储过程将一个或多个Transact-SQL语句分组到逻辑单元中,并作为对象存储在数据库服务器中。 当第一次调用存储过程时,SQL Server会创建执行计划并将其存储在计划缓存中。 在之后的存储过程执行中,SQL Server重用该程序,以便存储过程可以非常快速地执行并具有可靠的性能。 本系列教程将介绍存储过程,并演示如何开发灵活的存储过程以优化数据库访问。 第1节. SQL

  • 主要内容:PL/SQL子程序的部分,创建存储过程,执行独立程序,删除独立存储过程,PL/SQL子程序中的参数模式,传递参数的方法在本章中,我们将讨论PL/SQL中的存储过程。 子程序是执行特定任务的程序单元/模块。 这些子程序组合起来形成更大的程序。这种做法被称为“模块化设计”。 子程序可以被称为调用程序的另一个子程序或程序调用。 可以在以下几个地方中创建一个子程序 - 在模式(schema)级别中 一个程序包中 在PL/SQL块中 在模式(schema)级别中,子程序是一个独立的子程序。它是使