问题标签 [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 回答
771 浏览

sql-server-2008 - 从 CLR 存储过程调用 T-SQL 存储过程

非常简短的背景:我们正在使用 CLR 存储过程来应用访问控制,使用 Active Directory 对查询结果进行限制,以相应地限制最终用户可以看到的内容。简而言之,这是通过从数据表中删除用户不满足访问结果(在本例中为文档)的标准的行来完成的。

在显示结果之前,此过滤先前已在客户端上完成。SQL 2008 和更强大的服务器是将此访问过滤移出客户端的动机。

我想知道的是,从等效的 CLR 存储过程调用原始常规 T-SQL 存储过程是否有任何性能优势,而不是将“内联”T-SQL 传递给命令对象(在这种情况下只是作为存储过程的原始 T-SQL)?我找不到有人提到这一点的任何地方(部分原因可能是因为它作为 CLR SP 的示例会非常令人困惑,我猜 :-))。在我看来,您可能会因为 T-SQL 存储过程已经被优化和编译?

有人可以为我确认吗?

希望我已经足够清楚了。非常感谢,

科尔姆。

0 投票
1 回答
2348 浏览

sql-server-2008 - 使用表值参数从 CLR 存储过程中调用存储过程

情况:

一个 Clr 存储过程,它构建数据表,然后尝试使用 TVP 参数调用 SQL 存储过程。

编码:

..................................................... .....................

问题:

行为不稳定。有一次它起作用,在 x(其中 x 是随机的)调用之后,它会给我 y(其中 y 是随机的)“发生严重错误”,没有其他细节,之后循环将重新开始。据我所知,问题出在 CLR SP 方面,因为当错误开始发生时,SQL SP 可以更改并出现故障,因为错误保持不变。也许CLR SP和TVP之间没有爱,但我没有找到任何参考。

附带说明一下,当它工作时,它可能会工作很长时间,但如果我删除 SP 计划,它就会开始出现故障。(在那个“触发器”中也找不到逻辑)

有什么想法吗 ?先感谢您。

0 投票
1 回答
912 浏览

solrnet - CLR 存储过程中的 SolrNet

有没有人在 CLR 存储过程中使用过 Solrnet?我真的很感激一些好的教程的指针。

我面临的一个问题是我找不到将 SolrNet 库作为对 VS (2008) Database (SQL Server) 项目的引用的方法。

更新:

所以看起来当你有一个 SQL Server 项目,并且你想添加对库的引用时,它必须首先存在于 SQL Server 本身中,这是有道理的。这是通过使用以下 SQL 从 DLL 本身在 SQL Server 中创建程序集来完成的:

(请注意,UNSAFE可能会对数据库的安全性产生一些影响,但现在对我来说还可以)

但是 SolrNet.dll 需要其他库依赖项,例如Castle.Windsor.dll(它本身需要System.Core.dll)和Ninject.dll。我找到了所需版本的Castle.Windsor.dll(即 2.5.1.0)和System.Core.Dll(位于 Windows 的 .Net 文件夹中),但是我找不到所需版本的Ninject.dll(其中应该是 2.1.0.76)。我试图创建程序集版本 2.2,但正如预期的那样,它没有完成这项工作。

我在不同的存储库上搜索它,但找不到它。有谁知道我在哪里可以找到这个版本的 DLL?

更新 2:

所以在网上搜索了很多之后,我仍然没有找到Ninject.dll v2.1.0.76。我的下一个尝试是使用 SolrNet 的下一个版本(即 v0.4.0.2002)。这个版本需要我已经找到的Ninject.dll v2.2 。所以我目前的状态是在 SQL Server 中注册所有其他依赖于SolrNet.dll的库。我将保留此文件以记录我的过程,以防有人遇到同样的问题。

更新 3:

我已经设法注册了所有必需的库(其中一些是我从GitHub 上的 SolrNet 源获得的)。所以现在,SolrNet 在 SQL Server 中注册为程序集,因此我可以从 .NET SQL Server 项目(用于创建 CLR 存储过程)中引用它。所以我编写了一个非常简单的 CLR SP,它连接到 SOLR 并检索一条数据。下面的代码:

我的下一个问题是,当我部署和运行 CLR SP 时,弹出一个错误,指出 Solr 已在容器中注册。我在 SQL Server Management Studio 中看到的确切输出如下:

PrintToday是 CLR StoredProcedure 的名称

CLRStoredProcedures2是 .NET SQL Server 项目的名称和 VS 2008 中的默认命名空间

ActiveProduct是 Solr 中文档的名称,带有 Solr 注解的 cs 类

从输出中可以看出,第一个Pipe.send("Hellooo")是完成它的工作,因此 SP 工作正常,直到那里。

当我搜索上述错误时,我发现它会显示何时尝试在同一应用程序中注册 Solr 实例两次。现在我看不到我在哪里注册了两次实例。我在这里错过了什么吗?

请注意,当在我的机器上开发的 cs 控制台应用程序中执行时,上述 cs 函数运行良好。另一个可能很重要的细节是 SOLR 服务器托管在我的机器上,该机器与我的 SQL Server 2005 位于同一网络上。

更新 4:

对于初学者,我上面提到的错误(在更新 3 中)在部署后第一次执行 SP 时不会触发(假设第一次现在有效,因为我目前正在修复另一个错误),之后再次执行 SP 时会触发该错误。因此,似乎无论SolrNet.Startup.Init<ActiveProduct>("http://192.168.2.190:8983/solr");在做什么(创建某种与我认为与容器有关的会话)当从 SP 调用时它都没有释放“会话”,因此第二次(以及之后的每次)SP 被执行,错误被触发。有没有办法停止会话或从容器中释放。作为解决方法,我可以做的是try - catch部分SolrNet.Startup.Init,但这并不干净。

谢谢。

0 投票
2 回答
2509 浏览

sql-server - SQL Server 发送电子邮件通知插入表中的数据 - 选项?

我有一个在多个 ASP.NET (VB.NET) 网站之间共享的 SQL Server 数据库,该数据库有一个存储客户查询的表 - 我希望提供电子邮件通知,通知组织内相关人员的新查询(可能将一些查询数据放入电子邮件正文中)。请有人可以概述我的选项如何实施?

我的想法是:

  1. SQLMail
  2. 数据库邮件
  3. 使用 System.Net.Mail 库的 VB.NET 存储过程?
  4. 其他选择?

选项 3 似乎是可取的,因为我知道如何在 VB.NET 中执行此操作,而且它很简单。

  • 我还有哪些其他选择?
  • 有什么注意事项?
  • 我可以实时执行此操作,即触发器(插入量低)吗?
  • 还是分批完成(即一项工作)是否至关重要?

非常欢迎任何帮助!谢谢。

0 投票
2 回答
1579 浏览

c# - CLR 存储过程需要一个 Sql Server 执行线程

我有一个 CLR 触发器,它使用BeginInvoke. 在存储过程中,我尝试调用 SqlComman,但我得到:请求的操作需要 Sql Server 执行线程。当前线程是由用户代码或其他非 Sql Server 引擎代码启动的。

我必须在 SP 中做这些事情,并且BeginInvoke由于等待,我必须用 调用 SP。

编码:

对于 SP 中的所有调用 SQL 查询,我怎么能这样做?

0 投票
1 回答
1443 浏览

c# - 使用 CLR 存储过程时的问题和解决方法?

我们正在我们的组织中浮动一个新的可扩展且以性能为中心的 ASP.Net 应用程序,该应用程序目前处于设计阶段。

经理们决定采用混合方法。他们决定广泛使用 CLR 存储过程,而 T-SQL 仅用于简单的数据操作。

我想从社区了解以下内容:

  1. 这么多 CLR 存储过程在后期是否会出现性能问题?
  2. 如果您有任何性能问题,MS 团队是否有可用的修复程序?

注意:我做了一个谷歌,发现以下最可能的问题,但还没有找到前两个的解决方案。

  1. 当 SQL Server 加载程序集时,它们会缓存在内存中。当 O/S 向 SQL Server 发出内存压力信号时,可能会运行显式垃圾回收,并且可能会卸载程序集。如果频繁发生,这可能会导致性能问题。

  2. 查询优化器无法准确计算 SQL CLR 代码的成本,因为它不查看代码实际执行的操作——这会影响执行计划。

  3. SQL CLR 代码有时会阻止并行性,因为它们通常是单线程的。有时这会损害性能。<< 虽然我在这里找到了解决方案Multi-threaded code in CLR Stored Procs? >>

让我知道 CLR 存储过程的问题和修复。

0 投票
1 回答
2165 浏览

c# - SQL-CLR 存储过程不返回值

我查看了 Stackoverflow 并在这里发现了几乎相同的问题。一年前有人问过,还没人回答。也许我会比 user1038334 更幸运,有人会帮助我。

我有一个 SQL CLR 存储过程,它可以正常工作好几天,直到发生奇怪的事情。我的存储过程更新表并返回一个值作为结果代码。因此,通过查看此值,我可以确定是否出现问题。问题在于接收这个结果值。C# 代码在接收到返回值时引发异常。

最有趣的是,如果我连接 SQL Profiler,捕获查询,然后在 SQL Server Management Studio 中执行此查询,我仍然可以毫无问题地获得结果值:

一旦我重新发布 CLR 程序集或重新启动 SQL Server,一切都会得到修复。

我很确定这种奇怪的行为应该是有原因的,但我找不到。

  • SQL Server 版本:Microsoft SQL Server Developer Edition(64 位)-v.10.50.1765.0

  • 主机操作系统版本:Microsoft Windows NT 6.1 (7601)

  • .Net版本:v4.0.30319

任何帮助将不胜感激。

0 投票
2 回答
811 浏览

.net - CLR 存储过程线程异常

我有以下代码可以在 exe 中工作,甚至可以在 CLR 中的小 xml 文件上工作,但是一旦它们大于 10mb,我就会收到线程中止错误。我需要在 SQL Server 中配置什么吗?

错误信息:

0 投票
1 回答
453 浏览

c++ - 带有非托管代码的 CLR SP

我有一些 C++ 代码(www.NR.com 函数),我想在 SQL Server 2008R2 CLR SP 中使用。试图在 C# 中制作一个包装器,但没有运气。也许有人有一个工作示例或手册如何制作这样的包装器并设置所有必需的编译器/链接器选项?

谢谢

0 投票
1 回答
1108 浏览

sql-server - Analysis Services 存储过程性能

我正在.NET 中编写一个存储过程来执行一些在纯 MDX 中无法轻松编写的复杂计算。我遇到的第一个问题是如何以表格形式检索一组数据以传递给我的计算。

到目前为止,我的代码写在下面。我会认为,在我们在位置 ** 1 检索我们的值之后,我们将拥有内存中的所有数据进行交互。但是,似乎在 * *2 位置,我们范围内的每一天都会向存储引擎发出一个 Query Subcube。这对性能是毁灭性的。

有什么我做错了吗?我可以调用另一种方法来一次评估集合吗?