正在截获SELECT查询并调用已注册的.NET模块

本文关键字:注册 NET 模块 调用 SELECT 查询 | 更新日期: 2023-09-27 18:27:25

SQL Server 2008 R2支持CLR集成,其中.NET模块可以在数据库中注册,并可以通过SQL存储过程、函数和触发器调用。我们能够开发这样的.NET模块并与SQL Server集成。

但是我们有一个不同的要求,它需要拦截(从任何SQL客户端)发送到SQL Server的SELECT查询,并调用.NET模块并将查询参数(where子句)传递给它。

例如,如果我们在数据库中有一个表(VarInfo),它有两列VarID(string)和Value(float)。现在假设该表包含100个变量的记录,VarID:V001到V100。但是"值"列对于所有记录都为空。Value数据未存储在数据库中。如果我们有SQL选择查询:

SELECT Value from VarInfo where VarID = 'V001'

那么SQL Server应该调用.NET模块并传递VarID。.NET模块应从某个外部源获取变量Value。然后,它将把值返回给SQL Server。SQL Server应将该值作为查询输出/结果返回。

请了解以上在SQL Server 2008 R2中的可行性。

谢谢,

正在截获SELECT查询并调用已注册的.NET模块

最接近的是CLR用户定义函数,但调用代码需要意识到它是一个UDF,并以稍微不同的方式传递参数,如:

SELECT Value FROM dbo.CLRUDF('V001')