问题标签 [clrstoredprocedure]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
6287 浏览

sql - SQL CLR 存储过程和 Web 服务

我目前正在处理一项需要从 CLR 存储过程调用 Web 服务中的方法的任务。

一点背景:

基本上,我有一项需要大量工作的任务。如果严格在 SQL 中完成,处理大约需要 30-45 分钟。如果我将相同的过程放入代码中,我可以在几秒钟内完成它,因为能够更有效地优化处理。唯一的问题是我必须将此进程设置为 SQL Server 中的自动化任务。

在这种情况下,我将流程公开为 Web 服务(我也将它用于其他事情)并希望 SQL CLR 存储过程使用该服务并执行代码。这让我可以完成我的自动化任务。

问题:

我已经阅读了很多关于如何在 CLR Sproc 中使用 Web 服务的不同主题,并且非常有效地做到了这一点。这是我所遵循的示例。

http://blog.hoegaerden.be/2008/11/11/calling-a-web-service-from-sql-server-2005/

我可以让这个例子正常工作。但是,每当我将此进程与涉及数据库调用的 Web 服务方法配对时,我都会收到以下异常(取决于我是否包含在 try/catch 中):

消息 10312,级别 16,状态 49,过程 usp_CLRRunDirectSimulationAndWriteResults,第 0 行 .NET Framework 执行已中止。UDP/UDF/UDT 没有恢复线程令牌。

或者

消息 6522,级别 16,状态 1,过程 MyStoredProc,第 0 行

执行用户定义的例程或聚合“MyStoredProc”期间发生 .NET Framework 错误:

System.Security.SecurityException:请求“System.Security.Permissions.EnvironmentPermission,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”类型的权限失败。

System.Security.SecurityException:

在 System.Security.CodeAccessSecurityEngine.Check(对象需求,StackCrawlMark& stackMark,布尔 isPermSet)

在 System.Security.CodeAccessPermission.Demand()

在 System.Net.CredentialCache.get_DefaultCredentials()

在 System.Web.Services.Protocols.WebClientProtocol.set_UseDefaultCredentials(布尔值)

在 MyStoredProc.localhost.MPWebService.set_UseDefaultCredentials(布尔值)

在 MyStoredProclocalhost.MPWebService..ctor()

在 MyStoredProc.StoredProcedures.MyStoredProc(字符串 FromPostCode,字符串 ToPostCode)

我确信这是一个许可问题,但我不能,因为我的生活让它工作。我曾尝试在 CLR 存储过程中使用模拟和其他一些东西。有什么建议么?我错过了什么?

0 投票
1 回答
2574 浏览

sql-server - CLR 存储过程中的多线程代码?

多线程 CLR 存储过程是否可能?

我有一项数据密集型任务,具有很大的并行化潜力。CLR 存储过程可以很好地消除将数据移出进程的开销,我担心我不得不放弃并行计算。

我有哪些选择?

注意:我们使用的是 SQL Server 2005,计划在 4 个月内升级到 SQL Server 2008

0 投票
1 回答
699 浏览

c# - 将断开数据集中多个表的更改发送到 SQLServer

我们有一个第三方应用程序,它接受使用 XML RPC 机制调用存储过程的调用。

我们使用这种机制发送一个包含多个表的 ZIP 压缩数据集,其中包含一堆更新/删除/插入。另一方面,CLR sproc 解压缩数据并获取数据集。

然后,执行以下代码:

这是 RowUpdating 事件的事件处理程序:

和 CreateUpdateCommand 方法:

但是,当我们有很多记录时,这真的很慢。

有没有办法优化这个或完全不同的方式在几个表上发送大量 udpate/delete?我真的很想为此使用 TSQL,但无法找到将数据集发送到常规存储过程的方法。

补充笔记:

  • 我们不能直接访问 SQLServer 数据库。
  • 我们尝试不进行压缩,但速度较慢。
0 投票
2 回答
1977 浏览

msbuild - 在 Build Server 上的 CLR Storedprocedure 项目上执行 MSBuild 时出错

在我们的构建服务器(Team City)上使用 MSBuild 构建 CLR 存储过程项目时,我们收到以下错误:

错误 MSB4019:未找到导入的项目“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\SqlServer.targets”。确认声明中的路径正确,并且该文件存在于磁盘上

我检查了该文件是否存在于磁盘上,果然不存在。我已经检查了我自己的机器,它确实存在。

我真的不想开始手动将文件复制到构建服务器。

这是正在导入到 proj 文件的 csproj 文件中的行:

这是由我们的 Team City Server 运行的 proj 文件中的行:

我的问题是:

这个文件来自哪里?例如,它是否是 Visual Studio 安装的一部分。或者是否有一些重新分发包允许我在我们的构建服务器上编译这个项目?

谢谢

顺便说一句..如果我只是将文件复制到构建服务器上,它确实可以工作。

戴夫

0 投票
1 回答
1590 浏览

c# - 在 VS 中部署 CLR udf 项目时出错 - 在 SQL 目录中找不到 system.core 3.5

我正在构建本文中讨论的 CLR 存储过程和 UDF:

http://www.codeproject.com/KB/cs/CLR_Stored_Procedure.aspx

当我执行 Build > Deploy 时,我收到以下错误:

错误:程序集“system.core,版本=3.5.0.0,文化=中性,publickeytoken=b77a5c561934e089。” 在 SQL 目录中找不到。

请注意,我在 .NET 3.5 中使用了一些类。

我怎样才能解决这个问题?我正在部署到 Sql Server Express,但在产品中它将是 Sql Server 2005。

0 投票
1 回答
281 浏览

sql-server - CLR 存储过程

在 ASP.NET 应用程序中,我有少量相当复杂、经常使用的操作来对数据库执行。在这些操作中,几个表中的一个或多个需要基于对某些表的输入参数和值的逻辑评估来更新或插入。我一直保持逻辑和数据访问的分离,所以目前的操作是这样的:

  1. 从客户端收到的请求
  2. 业务层调用数据层从数据库中检索数据
  3. 业务层处理结果并确定执行哪个操作
  4. 业务层调用适当的数据操作
  5. 响应发送给客户端

如您所见,客户端在向数据库发出两个单独的请求时一直在等待。在寻找解决方案时,我找到了 CLR 存储过程,但我不确定我是否对它们的用途有正确的认识。

我已经为上面的代码编写了一个替换,特别是在 CLR SP 中放置了步骤 2-4。我的理解是 SP 将由 SQL Server 在本地执行,并且只对服务器进行一次调用。

我的问题基本上是,这是 CLR SP 的预期用途还是我遗漏了什么?

我意识到这在结构上有点妥协,所以如果有更好的方法来做到这一点,我很乐意听到它。

0 投票
3 回答
1340 浏览

sql-server - SQL Server CLR 存储过程在数据处理任务中的好坏?

简而言之——在CLR 存储过程中实现大部分业务逻辑是否是一个好的设计解决方案?

我最近读了很多关于它们的文章,但我不知道什么时候应该使用它们,什么是最佳实践,它们是否足够好。

例如,我的业务应用程序需要

  • 解析一个固定长度的大文本文件
  • 从文件的每一行中提取一些数字,
  • 根据这些数字应用一些复杂的业务规则(涉及正则表达式匹配、与数据库中许多表中的数据进行模式匹配等),
  • 并且作为这个计算更新数据库中的记录的结果。

还有一个 GUI 供用户选择文件、查看结果等。

此应用程序似乎是实现经典 3 层架构的理想选择:数据层、逻辑层和 GUI 层。

  • 数据层将访问数据库
  • 逻辑层将作为 WCF 服务运行并实现业务规则,与数据层交互
  • GUI 层将是逻辑层和用户之间的一种通信方式。

现在,考虑到这种设计,我可以看到大部分业务规则可以在 SQL CLR 中实现并存储在 SQL Server 中。我可能会将所有原始数据存储在数据库中,在那里运行处理并获得结果。我看到了这个解决方案的一些优点和缺点:

优点

  • 业务逻辑靠近数据运行,这意味着更少的网络流量。
  • 一次处理所有数据,可能利用并行化和最佳执行计划。

缺点

  • 业务逻辑的分散:有些部分在这里,有些部分在那里。
  • 有问题的设计方案,可能会遇到未知问题。
  • 难以为处理任务实现进度指示器。

我想听听您对 SQL CLR 的所有意见。有人在生产中使用它吗?这样的设计有问题吗?这是一件好事吗?

0 投票
2 回答
3934 浏览

sql - SQL 语法错误 CREATE PROCEDURE AS EXTERNAL

问题:如果我将 IF not exists 添加到创建过程作为外部名称语句,我会收到语法错误...为什么?如果我分别运行它们,这两个语句都可以正常工作......

0 投票
1 回答
148 浏览

sql - 从脚本中跟踪存储过程所在的数据库

有没有办法查询存储过程位于哪个数据库?我让这堆数据库相互进行了很多跨数据库查询,现在我迷失了 1 个存储过程,我只想查看它位于哪个数据库。我想制作一个脚本,该脚本将返回该存储过程所在位置的数据库名称。

这可能吗?

0 投票
2 回答
1475 浏览

sql-server-2005 - 为什么 CREATE ASSEMBLY 失败并出现错误“无法解析令牌”?

我正在使用一些用 C# 编写的 SQL 2005 CLR 代码。我们最近更改了一些函数以允许 NULL 参数。我们通过将参数从“double”类型更改为“SqlDecimal”类型来做到这一点。我们成功测试了开发中的更改,并已将更新部署到生产服务器。我们使用 SQL 脚本从服务器中删除现有代码,然后创建更新的程序集和相关对象。我们在开发和测试中使用的 SQL 脚本已经部署到生产服务器上,没有任何更改,但是当我们在那里运行它时,我们看到一个错误:

我已经用谷歌搜索了这个错误,但似乎找不到任何合理的东西。在我们所做的更改中,没有新的或更改的引用,因此我认为这与服务器中缺少的任何内容无关,代码之前已经在那里工作了很长一段时间。有谁知道这里发生了什么?