繁体   English   中英

存储过程输出以查看

[英]Stored procedure output to view

我有只能从表或视图中读取的软件。 我需要为该软件提供一些来自clr方法的数据(例如,来自Web服务的数据)。 该软件将读取以下数据:

select * from my_view WHERE somefield = 'data_identificator'

然后clr需要获取该字段作为参数并执行其他代码,然后从视图返回结果(如结果)。 有可能吗?

如果提供了所需代码的完整示例而不是部分示例,则此问题将更容易回答,但我想我已经足够理解,可以朝着正确的方向发展。

是的,可以使用SQLCLR从外部资源(例如Web服务等)获取数据。 您可以编写专门的标量或表值函数来调用特定方法并返回已解析的输出。 或者,您可以创建一个泛型函数,该函数返回生成的XML,然后在T-SQL中对其进行解析。

如果需要执行多个步骤,则可以从T-SQL多语句表值函数调用该SQLCLR函数。 这甚至使您能够传递参数。

您的软件“只能从表或视图中读取”, 应该能够从此多SELECT表值函数(TVF)中进行SELECT ,因为它的作用类似于可以传递参数的视图。 如果出于某种原因您的软件无法从TVF中进行选择,则可以包装SELECT field1, field2, ... FROM dbo.MyTVF(); 在一个View

您究竟如何编写这样的SQLCLR函数来调用Web服务? 没那么快。 如果您首先问这个问题,那么将这种性质的代码复制粘贴到项目中,弊大于利。 是的,在各个站点(甚至在此处)都有几个在SQLCLR函数或过程中调用Web服务的示例,但是其中一些(甚至大多数?)做得很差。 即使您有.NET编程经验,也需要注意SQL Server CLR主机的许多细微差别。 因此,在没有先了解环境的限制以及如何与SQL Server正确交互之前,您实际上不应该编写SQLCLR代码。 为了解决这个问题,我开始着手编写有关SQL Server Central的系列文章: SQLCLR的阶梯 (需要免费注册)。

我还将提到,对于任何有兴趣调用URI但不愿意或无法编写任何代码来执行此操作的人, SQL# SQLCLR库中都有一个称为INET_GetWebPages的表值函数可以执行此操作。 完全公开:我是SQL#的作者,虽然有免费版本,但INET_GetWebPages函数仅在完整版本中可用。

因此,经过一些研究,并根据srutzky和JamesZ的最终回答发表评论。

  1. 创建CLR表值函数。
  2. 从某个帮助表创建视图,在该表中存储了所有可能的查询参数值。 我不知道如何摆脱它。 (对我来说这不是问题,我有这样的桌子)。

CREATE VIEW [dbo].[MyView] AS SELECT a.*, s.ValueFromTvf FROM HelpTable a CROSS APPLY dbo.MyClrFunction(a.PropertyA) s

如果我从该视图中SELECT
选择*从MyView
在哪里PropertyA ='123456'
MyClrFunction将使用参数“ 123456”执行。

暂无
暂无

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

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