Sql server SQL Server CLR嵌入业务逻辑并使用SQL Server代理计划执行

Sql server SQL Server CLR嵌入业务逻辑并使用SQL Server代理计划执行,sql-server,sqlclr,sql-server-agent,Sql Server,Sqlclr,Sql Server Agent,我拥有C#类库中类似工作流的应用程序的业务逻辑,但在每个月底需要调用库中的某些流程时,我认为调用此计划执行的理想机制是使用Sql server代理(最好是sql作业,尽管如果绝对需要,我甚至愿意进入SSIS地狱),但问题是如何从sql作业调用应用程序库的进程 应用程序库也可以从asp.net页面使用,因此它通常有一个web应用程序上下文(web.config),其中包含配置的输入和输出数据库 我知道这些步骤或多或少都很复杂 1) 将类库嵌入sql server CLR程序集中,并对其进行强键签名

我拥有C#类库中类似工作流的应用程序的业务逻辑,但在每个月底需要调用库中的某些流程时,我认为调用此计划执行的理想机制是使用Sql server代理(最好是sql作业,尽管如果绝对需要,我甚至愿意进入SSIS地狱),但问题是如何从sql作业调用应用程序库的进程

应用程序库也可以从asp.net页面使用,因此它通常有一个web应用程序上下文(web.config),其中包含配置的输入和输出数据库

我知道这些步骤或多或少都很复杂

1) 将类库嵌入sql server CLR程序集中,并对其进行强键签名和部署 2) 给图书馆打电话

我不清楚的是,在部署这样的CLR程序集时,web应用程序上下文会发生什么情况?如何使用apppiate app.config部署CLR?如果需要更改连接字符串,是否必须重新部署CLR


我也不确定,因为CLR需要连接回调用它的数据库(用于读写表),但我猜必须格外小心以避免自调用之类的事情。

首先,这篇文章以“使用SSIS”结尾:-p

只要库中包含指向System.Web.dll的链接,我认为您就无法在SQL Server中将其注册为SQLCLR程序集。SQLCLR汇编非常受限,不能包含任何引用

您可以将业务逻辑的前端特定部分移动到单独的表示层库中。这通常是一个比混合业务逻辑和表示类(如web应用程序上下文)更好的解决方案。之后,您可以尝试将程序集部署到SQL Server

现在,您可以创建第二个SQLCLR库,其中包含编排业务对象的.NET存储过程

然而,在这里,我并没有真正看到SQLCLR的优势。这将需要对源代码进行大量更改,并对整个应用程序造成一些限制

我的个人偏好是 或者使用SSIS包。在这里,您可以引用任何其他DLL并使用其功能。 或者编写一个简单的.NET控制台应用程序,该应用程序将由SQL代理启动。 在这两种情况下,执行情况几乎相同


SQLCLR专门设计用于处理可能(且具有启发性)的T-SQL特性的纯数据库特定任务。

首先,本文以“使用SSIS”结尾:-p

只要库中包含指向System.Web.dll的链接,我认为您就无法在SQL Server中将其注册为SQLCLR程序集。SQLCLR汇编非常受限,不能包含任何引用

您可以将业务逻辑的前端特定部分移动到单独的表示层库中。这通常是一个比混合业务逻辑和表示类(如web应用程序上下文)更好的解决方案。之后,您可以尝试将程序集部署到SQL Server

现在,您可以创建第二个SQLCLR库,其中包含编排业务对象的.NET存储过程

然而,在这里,我并没有真正看到SQLCLR的优势。这将需要对源代码进行大量更改,并对整个应用程序造成一些限制

我的个人偏好是 或者使用SSIS包。在这里,您可以引用任何其他DLL并使用其功能。 或者编写一个简单的.NET控制台应用程序,该应用程序将由SQL代理启动。 在这两种情况下,执行情况几乎相同


SQLCLR专门设计用于处理纯数据库特定的任务,这些任务可能会影响T-SQL的功能。

对此没有想法?对此没有想法?确实,您可以将System.Web和许多其他FCL库部署到SQL,但是只有2.0/3.0/3.5—不是4.0实际上,您可以将System.Web和许多其他FCL库部署到SQL,但只有2.0/3.0/3.5—不是4.0