问题标签 [sqlclr]

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 回答
281 浏览

sql-server - 从 CLR 函数接收 SQL Server 事件

我编写了一个包含多个方法的 CLR 类,这些方法在 SQL Server 2005 数据库中作为函数链接。当其中几个函数在一个事务或连接的范围内使用时,我需要在事务或连接关闭时自动执行另一个来清理一些东西(现在哪个时间都好,稍后我会决定哪个是最好的)。我认为从另一个新的 CLR 函数接收事件可以做到,但我不知道如何实现。

谁能告诉我有关模块、文档或其他内容的信息,这些信息可以帮助我了解如何在 CLR 类中接收事务或连接关闭事件,或者在这些事件发生时如何执行特定功能?

编辑:我创建了一个 C# 类,其中包含一个静态成员来存储值,以及两个静态方法来设置和获取成员的值。编译为 DLL 并将其作为程序集添加到 SQL Server 2005。方法作为 CLR 函数添加到同一服务器。结合不同的连接和事务来交替获取和设置值,让我看到静态成员没有被重置。我希望有一种自动方法将存储的值包含在一个事务或连接中(或清理静态成员),因此每个存储的值不会干扰另一个

0 投票
2 回答
362 浏览

c# - 如何从 SQL 存储过程配置传出连接?

我正在开发一个使用 Microsoft SQL 服务器的 .NET 项目。在这个项目中,我需要一个使用远程 Web 服务的 CLR 存储过程(用 C# 编写)。因此,当存储过程在 SQL 服务器上执行时,它会进行 Web 服务调用,从而将数据包发送到远程位置。问题是,在执行 SP 时,我得到:“System.Net.WebException:请求失败,HTTP 状态 403:禁止。”

数据库用户拥有完全权限,部署的 CLR 程序集和 SP 甚至被标记为“不安全”,我尝试对其进行签名等,所以这些都不会导致问题。

当我执行相同的 C# 代码,但从简单的控制台应用程序而不是作为 SP 时,一切正常。因此,我开始怀疑与网络相关的问题,并在执行 SP 和控制台应用程序版本时运行了数据包嗅探器。

我意识到发出的数据包具有不同的目标 IP 地址:控制台应用程序将数据包直接发送到 Web 服务 IP,而 SP 将数据包发送到我们公司使用的代理服务器。由于网络政策,后者是不允许的,这解释了“403 Forbidden”异常。

所以我的问题归结为:如何将 SP/MS SQL 服务器配置为不使用该代理?我希望它将数据包直接发送到 Web 服务 IP,就像测试控制台应用程序一样。(同样,C# 代码是相同的,所以这不是编程问题)。

我已经禁用了 Internet Explorer 中的所有代理设置,以防 SQL 服务器继承这些设置或其他东西。然而,没有运气。

任何帮助将不胜感激!

最好的问候,彼得

0 投票
3 回答
961 浏览

parsing - 如何解析布尔逻辑?

我需要编写一个布尔逻辑解析器,它将布尔逻辑语言转换为 SQL WHERE 子句。

操作数的顺序总是正确的(右边有值)。

这是一个相对简单的例子。可能有嵌套括号和使用 NOT 运算符等。

这就是 WHERE 子句的样子。

0 投票
2 回答
7744 浏览

.net - CLR SQL 程序集:获取字节流?

我有一个要部署的 SQL CLR dll,但发现您可以将字节流/varbinary_literal/varbinary_expression/assembly 位嵌入到文本文件中,以解决打包 DLL 的麻烦,并确保CREATE ASSEMBLY可以访问它命令

但我还没有找到的是如何获得该字节流/varbinary_literal/varbinary_expression/assembly bits 值。我没有找到任何一致的术语,以及我在使用Load().

0 投票
3 回答
3589 浏览

sql-server - 创建具有可变数量参数的 CLR UDF

我想要一个函数来查找传入的字符串值列表中的最大值。

我想从 sql server 调用它作为 Select best('Abcd','Efgh','Zxy','EAD')。它应该返回 Zxy。参数的数量是可变的。顺便说一下,它与 oracle GREATEST 函数非常相似。于是我写了一个很简单的CLR函数(Vs2008)并尝试部署。见下文

但是当我尝试编译或部署它时,我得到以下错误找不到数据类型 SqlString []。

是否可以使用 SQL CLR 满足我的要求?

0 投票
1 回答
1801 浏览

c# - SQL CLR 和可为空的日期时间参数

我正在尝试编写一个 SQLCLR 函数,该函数将 DateTime2 作为输入并返回另一个 DateTime2。根据这篇文章,我将参数更改为 C# 类型 DateTime,从而达到我需要的精度水平。但是,因为输入可以是 null 我希望它是 DateTime?; 返回类型也是如此。

问题是我在尝试部署时收到以下错误:

错误 1 ​​找不到类型“Nullable`1”,因为它不存在或者您没有权限。SqlServer.Functions

我正在使用 Sql Server 2008 和 Visual Studio 2008。

0 投票
3 回答
152 浏览

mysql - 将记录从 MySQL 数据库导入 MS SQL 的最佳解决方案(每小时)

我需要将存储在我不维护的 MySQL 数据库中的记录导入我的 Sql Server 2005 数据库 (x64)

我们应该每隔一段时间(可能是 1 小时)导入记录。

执行常规导入的最佳解决方案是什么?

  1. Windows 服务(使用参考 MySql.data dll)
  2. Windows 客户端(可以使其自动化)
  3. SQL 扩展存储过程(是否可以引用 MySQL.data dll?)
  4. SSIS 包 - 安装 MySQL ODBC 驱动程序

#4 的问题是我真的不想在 sql server 上支持 ODBC 驱动程序。

我不确定您是否甚至可以将 x86 MySql.data dll 引用到 #3 的 x64 sql 服务器进程中。(或者,如果您甚至可以在 sql server 项目中引用该 dll)

0 投票
4 回答
14624 浏览

.net - 如何注册 System.DirectoryServices 以在 SQL CLR 用户函数中使用?

我正在移植一个旧的 32-bit COM组件,该组件是VB6为了读取和写入Active Directory服务器而编写的。新的解决方案将C#使用并将使用SQL CLR用户功能。

我尝试部署到的程序集SQL Server包含对System.DirectoryServices. SQL Server该项目确实编译没有任何错误,但由于以下错误,我无法将程序集部署到:

Error: Assembly 'system.directoryservices, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.' was not found in the SQL catalog.

System.DirectoryServices在 SQL Server 上注册的正确步骤是什么?

0 投票
1 回答
1427 浏览

sql-server - CREATE ASSEMBLY 验证失败:没有足够的存储空间来完成此操作

我有一个使用带有 CLR 存储过程的 SQL Server 2005 Express 的小型应用程序。它已成功安装并在许多运行 XP 和 Vista 的计算机上运行。

要创建程序集,请执行以下 SQL(更改名称以保护无辜者):

在一台运行 Vista 并且具有一些非常激进的安全策略限制的计算机(反映其他要安装的计算机的测试计算机)上,我收到以下错误:

消息 6218,级别 16,状态 2,服务器域\服务器名称,第 2
行为程序集“myAssembly”创建程序集失败,因为程序集“myAssembly”验证失败。检查引用的程序集是否是最新的并且受信任(对于 external_access 或不安全)以在数据库中执行。如果有任何 CLR 验证程序错误消息将跟随此消息

[ : myProcSupport.Axis::Proc1][mdToken=0x6000004] [HRESULT 0x8007000E] - 没有足够的存储空间来完成此操作。

[ : myProcSupport.Axis::Proc2][mdToken=0x6000005] [HRESULT 0x8007000E] - 没有足够的存储空间来完成此操作。

[ : myProcSupport.Axis::Proc3][mdToken=0x6000006] [HRESULT 0x8007000E] - 没有足够的存储空间来完成此操作。

[ : myProcSupport.Axis::.ctor][mdToken=0x600000a] [HRESULT 0x8007000E] - 没有足够的存储空间来完成此操作。

[ : myProcSupport.Axis::Proc4][mdToken=0x6000001] [HRESULT 0x8007000E] - 没有足够的存储空间来完成此操作。

[ : myProcSupport.Axis::Proc5][mdToken=0x6000002] [HRESULT 0x8007000E] - 没有足够的存储空间来完成此操作。

[ : myProcSupport.Axis::Proc6][mdToken=0x6000007] [HRESULT 0x8007000E] - 没有足够的存储空间来完成此操作。

[ : myProcSupport.Axis::Proc7][mdToken=0x6000008] [HRESULT 0x8007000E] - 没有足够的存储空间来完成此操作。

[ : myProcSupport.Axis::Proc8][mdToken=0x6000009] [HRESULT 0x8007000E] - 没有足够的存储空间来完成此操作。

[ : myProcSupport.Axis::Proc8][mdToken=0x600000b] [HRESULT 0x8007000E] - 没有足够的存储空间来完成此操作。

[ : myProcSupport.Axis::Proc9][mdToken=0x600000c] [HRESULT 0x8007000E] - 没有足够的存储空间来完成此操作....

C# DLL 被定义为SAFE它只使用数据库中包含的数据。DLL 通常没有签名,但我提供了一个签名版本来测试并收到相同的结果。

安装是由其他人完成的,我无权访问该框,但他们正在执行我提供的脚本并在其他计算机上工作。

除了脚本提供的结果之外,我试图找到有关此错误的信息,但我没有发现任何有用的信息。

执行脚本以创建程序集的人使用管理员帐户登录,以管理员身份运行 CMD,通过 Windows 身份验证连接到数据库,已添加到 dbo_owner 角色,并希望添加到服务器角色 SysAdmin这是一个权限问题。这并没有改变什么。

我是否需要为此环境配置不同的 SQL Server 2005 Express?

除了 SQLCMD 的输出之外,此错误是否记录在任何地方?什么可能导致此错误?Vista 安全策略会导致这种情况吗?

我无法使用计算机(客户正在测试),所以我无法自己检查盒子。

TIA

0 投票
2 回答
12923 浏览

c# - 将表作为参数传递给 SQLCLR TV-UDF

我们有一个第三方 DLL,它可以对源信息的 DataTable 进行操作并生成一些有用的值,我们正在尝试通过 SQLCLR 将其连接起来,以便在 SQL Server 2008 中作为表值 UDF 进行调用。

将这里的概念更进一步,我想编写一个CLR 表值函数,该函数对来自数据库的源数据表进行操作。

我很确定我了解在 T-SQL 方面需要发生什么;但是,.NET (C#) 代码中的方法签名应该是什么样子?“来自 SQL Server 的表数据”的参数数据类型是什么?

例如

lat/lon -> distance 是一个愚蠢的例子,当然应该更好地完全在 SQL 中处理;但我希望它通过绑定到 SQLCLR 程序集的表值 UDF 来说明 table-in -> table-out 的一般意图。

我不确定这是否可能;SQLCLRInitMethod 方法签名在 C# 中会是什么样子?

如果不可能,我知道我可以在 C# 代码中使用“context connection=true”SQL 连接,让 CLR 组件在给定相关键的情况下查询必要的数据;但这对数据库模式的变化很敏感。所以我希望让 SQL 捆绑所有源数据并将其传递给函数。

额外的问题 - 假设这完全有效,它是否也适用于多个输入表?