问题标签 [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 投票
3 回答
1778 浏览

web-services - 为什么 SQL Server CLR 过程在对 Web 服务的 GetResponse() 调用中挂起

环境:C#、.Net 3.5、Sql Server 2005

我有一个适用于独立 C# 控制台应用程序项目的方法。它从数据库中的数据创建一个 XMLElement,并使用私有方法将其发送到我们本地网络上的 Web 服务。在这个测试项目中从 VS 运行时,它的运行时间 < 5 秒。

我将该类复制到 CLR 项目中,构建它,并将其安装在 SQL Server 中(WITH PERMISSION_SET = EXTERNAL_ACCESS)。唯一的区别是我为调试添加的 SqlContext.Pipe.Send() 调用。

我正在使用 SSMS 查询窗口中的一个存储过程(在 CLR 中)使用 EXECUTE 命令对其进行测试。它永远不会回来。当我在一分钟后停止执行调用时,显示的最后一件事是“使用http://servername:53694/odata.svc/Customers/调用 GetResponse() ”。关于为什么在 SQL Server 中执行 GetResponse() 调用不返回的任何想法?

0 投票
1 回答
2610 浏览

c# - 从包含带有 xml 的参数的 SQL CLR 函数调用 System.Diagnostics.Process.Start

我在 SQL Server 2008 CLR 项目中有一个存储过程。此函数使用包含一些 xml 的参数调用控制台应用程序。

这里的问题是包含 xml 的参数。这是执行存储过程的表达式:

执行存储过程后,出现如下错误:

<此时是出乎意料的。

我想注意到没有 xml 一切正常。

0 投票
5 回答
7911 浏览

c# - 如何在没有 Visual Studio 的情况下生成 SQL CLR 存储过程安装脚本

我正在使用 VS2010 处理 CLR 存储过程。我需要生成独立部署脚本以在客户服务器上安装此过程。现在我正在使用 Visual Studio,当我按下 F5 并尝试在 DB 服务器上调试 SP 时,它会生成这样的脚本。该脚本放置在bin\Debug\MyStoredProcedure.sql文件中。它看起来像这样:

我想知道,是否可以在没有 Visual Studio 的情况下生成这样的脚本?例如,如果我使用 MSBuild 构建解决方案,然后使用某些工具生成此脚本怎么办?我相信,如果我将程序集读取为字节数组,然后将其序列化为十六进制字符串并插入脚本模板 - 它可以工作,但也许有一些更简单的标准解决方案?

谢谢。

0 投票
1 回答
313 浏览

sql-server - SQL Server stored procedures generator from SQL statement?

Does anyone know of a freeware to generate SQL Server stored procedure (ie trigger) from a SQL statement?

I mean I don't want the just basic CRUD stored procedures... What I'm looking for is something like this:

Taking a SQL statement like:

And issuing the complete stored procedure statements...

0 投票
2 回答
991 浏览

c# - CLR 存储过程中的全局异常处理程序

我使用 C# 和 Sql Server 2008,我的 CLR 存储过程中有一些 try/catch 块,这些块被捕获。这些记录在一个文件中,并使用 SqlPipe 返回代码错误和消息。这些工作罚款。现在,当我有一些未捕获的错误时,我需要做同样的事情,尤其是在日志文件中进行跟踪!

我尝试使用 Application.ThreadException 但此类在 CLR 存储过程 (WinForms) 中不可用。我是否必须在我的条目 Sql 过程方法中使用一个顽皮的 try/catch 块,或者有什么更好的办法吗?

谢谢。

0 投票
2 回答
942 浏览

c# - 用于加密的 SQL CLR 存储过程

背景:我有一个 SSIS 包,它从系统 A 加载配置文件数据并在系统 B 中创建相应的配置文件和成员资格用户。系统 B 使用自定义 ASP.NET 成员资格提供程序,它必须能够解密 SSIS 包生成的密码。我为 SSIS 包使用的盐生成和加密创建了 CLR 存储过程。

问题:为了让 ASP.NET Membership Provider 能够解密加密的密码,我需要设置 CLR 存储过程使用的 MachineKey。我不知道如何做到这一点,或者是否有可能。

我使用 Reflector 从 System.Membership dll 中提取所需的加密代码。经过一番重构后,它看起来像这样:

问题是SymmetricAlgorithm.Create()使用 MachineKey 定义的初始向量创建默认对称算法。

任何帮助表示赞赏。另外,如果有更好/不同的方法可能更容易,请告诉我。

谢谢。

0 投票
1 回答
398 浏览

tsql - CLR sproc,接受 nvarchar(max) 的对象参数

我有一个 CLR 存储过程,它从任意列中获取一个值作为参数。要处理所有可能的列,请使用object / sql_variant类型的参数 if :

从类型的列中传递数据时,nvarchar(max)我得到:

“操作数类型冲突:nvarchar(max) 与 sql_variant 不兼容”。

如果参数是一个字符串,我可以将其声明为SqlChar或装饰它[SqlFacet(MaxSize=-1)]以使其接受长度> 4000 的列。它是如何处理对象的?

0 投票
1 回答
363 浏览

clr - CLR 存储过程

我希望在 CLR 存储过程中使用 Cryptography API。

我创建了一个 CLR 存储过程并编写了一个 select 语句

现在我希望使用以加密形式存储在我将使用密码学方法的数据库中的员工编号过滤结果。

现在我被困在如何从SqlDataReader.

我希望返回格式为SqlDataReader,因为要从 CLR 存储过程返回多条记录,只有一种方法SqlContext.Pipe.Send(),并且该方法只接受SqlDataReader对象。

请指导我。

0 投票
1 回答
199 浏览

sql-server - 当来自 CLR SP 的结果数据应该被截断时,如何插入 EXEC?

我将从 CLR 存储过程返回的结果集插入到表变量中。我收到错误:“System.Data.SqlClient.SqlException:字符串或二进制数据将被截断”,因为结果集中某些字符串的长度超过了临时表中定义的 varchar 限制。烦人的是,截断正是我想要的!
那么,如何在插入时从存储过程中截断(其中的字符串)结果集?
我宁愿不更改 CLR SP 的代码。正在插入的数据中的字符串是任意长度的。

0 投票
2 回答
976 浏览

sql-server - 如何在 SQL Server 的 clr 存储过程中执行动态 .net 代码

有没有办法在 SQL Server 中动态更改 CLR 过程的代码?

假设您有一个在 MS SQL Server 2008 R2 中部署了业务逻辑的程序集。这个程序集(或多个程序集)一直在使用(例如,在多个并发查询中为表的每一行调用一些函数)。所以你不能只是放弃组装。有没有办法动态更改我的业务逻辑或执行外部可变代码?

我已经探索过这些方法,但没有一个奏效:

  1. 反射.发射
  2. 莫诺·塞西尔
  3. 在 SQL Server 中部署的程序集中加载外部程序集

更新:问题不在于发布过程:我希望能够通过 GUI 动态设置一些安全规则。

例如,一些用户应该只能看到没有地址的客户或去年的交易等等。

规则并不复杂,但它们几乎每天都在变化,我们不能将它们放入代码中。其余的业务逻辑在 TSQL 中实现。选择 CLR 是因为性能问题(动态 SQL 太慢)。

还有另一种选择:生成集群视图(在 WHERE 部分使用规则),但速度不够快。

更多细节:

假设我们有一些代码选择大表 dbo.Transactions 的一部分

如果我们想过滤结果以显示允许的行,我们可以生成一些索引视图并将其与结果集连接起来,如下所示:

但是,如果我们在大多数情况下检查执行计划,查询分析器会决定不过滤 dbo.Transaction 然后使用 vw_Transactions 连接,而是先连接然后过滤(这绝对是不可取的)。FORCE ORDER 之类的提示无济于事。