如何筛选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
我说出了我的想法来解释我到底想要什么。如果可能的话,请告诉我怎么做。请完成它。或者,如果不可能,请告诉我你的建议。
感谢
转到在托管代码中创建的存储过程。
构建一个包含现有代码的c#库,将其放在服务器上,然后将其"包装"在链接的msdn页面中记录的存储过程中。
来自应用程序的所有调用都将通过"c#存储过程"进行路由,该过程将过滤服务器上的记录。
从负载的角度来看,我看不出有多大优势,因为无论如何都会生成完整的记录集,服务器现在负责减少输出,但网络上传输的数据量会减少。
您可以尝试以下的内容
SELECT * INTO #temptable
FROM OPENROWSET('SQLNCLI', 'Server=loclhost;Trusted_Connection=yes;', 'exec procedurename')
SELECT TOP 100 * FROM #temptable