问题标签 [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.
sql-server - 从 CLR 函数接收 SQL Server 事件
我编写了一个包含多个方法的 CLR 类,这些方法在 SQL Server 2005 数据库中作为函数链接。当其中几个函数在一个事务或连接的范围内使用时,我需要在事务或连接关闭时自动执行另一个来清理一些东西(现在哪个时间都好,稍后我会决定哪个是最好的)。我认为从另一个新的 CLR 函数接收事件可以做到,但我不知道如何实现。
谁能告诉我有关模块、文档或其他内容的信息,这些信息可以帮助我了解如何在 CLR 类中接收事务或连接关闭事件,或者在这些事件发生时如何执行特定功能?
编辑:我创建了一个 C# 类,其中包含一个静态成员来存储值,以及两个静态方法来设置和获取成员的值。编译为 DLL 并将其作为程序集添加到 SQL Server 2005。方法作为 CLR 函数添加到同一服务器。结合不同的连接和事务来交替获取和设置值,让我看到静态成员没有被重置。我希望有一种自动方法将存储的值包含在一个事务或连接中(或清理静态成员),因此每个存储的值不会干扰另一个
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 服务器继承这些设置或其他东西。然而,没有运气。
任何帮助将不胜感激!
最好的问候,彼得
parsing - 如何解析布尔逻辑?
我需要编写一个布尔逻辑解析器,它将布尔逻辑语言转换为 SQL WHERE 子句。
操作数的顺序总是正确的(右边有值)。
这是一个相对简单的例子。可能有嵌套括号和使用 NOT 运算符等。
这就是 WHERE 子句的样子。
.net - CLR SQL 程序集:获取字节流?
我有一个要部署的 SQL CLR dll,但发现您可以将字节流/varbinary_literal/varbinary_expression/assembly 位嵌入到文本文件中,以解决打包 DLL 的麻烦,并确保CREATE ASSEMBLY可以访问它命令。
但我还没有找到的是如何获得该字节流/varbinary_literal/varbinary_expression/assembly bits 值。我没有找到任何一致的术语,以及我在使用Load()
.
sql-server - 创建具有可变数量参数的 CLR UDF
我想要一个函数来查找传入的字符串值列表中的最大值。
我想从 sql server 调用它作为 Select best('Abcd','Efgh','Zxy','EAD')。它应该返回 Zxy。参数的数量是可变的。顺便说一下,它与 oracle GREATEST 函数非常相似。于是我写了一个很简单的CLR函数(Vs2008)并尝试部署。见下文
但是当我尝试编译或部署它时,我得到以下错误找不到数据类型 SqlString []。
是否可以使用 SQL CLR 满足我的要求?
c# - SQL CLR 和可为空的日期时间参数
我正在尝试编写一个 SQLCLR 函数,该函数将 DateTime2 作为输入并返回另一个 DateTime2。根据这篇文章,我将参数更改为 C# 类型 DateTime,从而达到我需要的精度水平。但是,因为输入可以是 null 我希望它是 DateTime?; 返回类型也是如此。
问题是我在尝试部署时收到以下错误:
错误 1 找不到类型“Nullable`1”,因为它不存在或者您没有权限。SqlServer.Functions
我正在使用 Sql Server 2008 和 Visual Studio 2008。
mysql - 将记录从 MySQL 数据库导入 MS SQL 的最佳解决方案(每小时)
我需要将存储在我不维护的 MySQL 数据库中的记录导入我的 Sql Server 2005 数据库 (x64)
我们应该每隔一段时间(可能是 1 小时)导入记录。
执行常规导入的最佳解决方案是什么?
- Windows 服务(使用参考 MySql.data dll)
- Windows 客户端(可以使其自动化)
- SQL 扩展存储过程(是否可以引用 MySQL.data dll?)
- SSIS 包 - 安装 MySQL ODBC 驱动程序
#4 的问题是我真的不想在 sql server 上支持 ODBC 驱动程序。
我不确定您是否甚至可以将 x86 MySql.data dll 引用到 #3 的 x64 sql 服务器进程中。(或者,如果您甚至可以在 sql server 项目中引用该 dll)
.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 上注册的正确步骤是什么?
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
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 捆绑所有源数据并将其传递给函数。
额外的问题 - 假设这完全有效,它是否也适用于多个输入表?