繁体   English   中英

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

[英]How to filter output of all existing stored procedures in SQL Server?

我的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

我说出了我想要解释我想要的东西的想法。 如果有可能请告诉我如何。 请完成它。 或者如果不可能,请告诉我您的建议。

谢谢

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

构建包含您已有代码的ac#库,将其放在服务器上,然后将其“包装”在链接的msdn页面中记录的存储过程中。

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

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

你可以尝试下面的东西

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

SELECT TOP 100 * FROM #temptable

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM