如何筛选SQL Server中所有现有存储过程的输出

本文关键字:存储过程 输出 Server 何筛选 筛选 SQL | 更新日期: 2023-09-27 18:00:43

我的SQL Server数据库中有许多存储过程,其中大约90%返回一个表。该数据库是为存储C#项目的数据而创建的。

在一个场景中,当我调用过程时,从应用程序端来看,我希望能够应用一些通用过滤器来处理输出。例如,获取输出的前100条记录。这个过滤器应该为每个过程完成,所以我构建了一个单独的通用静态类,它是我的应用程序中调用该过程的唯一点。然后我过滤那里的每个输出并返回

好吧,这对我来说是有效的,但它并不高效,因为数据库返回冗余行,这些行将在应用程序端进行过滤。

我决定改进这份工作。我正在考虑迁移要在数据库端应用的过滤器,但不修改任何现有过程。

我的想法是在数据库中创建一个RunnerProcedure,它获取过程名称及其参数,运行它,应用我的通用过滤器,并最终返回结果输出。

例如,我的通用过滤器可能是:

select top 100 * from output

因此,在这种方法中,我必须实现这样的东西:

CREATE PROCEDURE RunnerProcedure 
AS 
    @ProcedureName nvarchar(max),
    @ProcedureParameters dbo.ProcedureParametersTableType READONLY 
BEGIN
 ... 
 // @output = execute @ProcedureName with @ProcedureParameters 
 Select top 100 * from (@output)
 I don't have any idea in implementation! please help.
 ...
END

我说出了我的想法来解释我到底想要什么。如果可能的话,请告诉我怎么做。请完成它。或者,如果不可能,请告诉我你的建议。

感谢

如何筛选SQL Server中所有现有存储过程的输出

转到在托管代码中创建的存储过程。

构建一个包含现有代码的c#库,将其放在服务器上,然后将其"包装"在链接的msdn页面中记录的存储过程中。

来自应用程序的所有调用都将通过"c#存储过程"进行路由,该过程将过滤服务器上的记录。

从负载的角度来看,我看不出有多大优势,因为无论如何都会生成完整的记录集,服务器现在负责减少输出,但网络上传输的数据量会减少。

您可以尝试以下的内容

SELECT * INTO #temptable 
FROM OPENROWSET('SQLNCLI', 'Server=loclhost;Trusted_Connection=yes;', 'exec procedurename')
SELECT TOP 100 * FROM #temptable