问题标签 [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.
c# - 使用数据集的 SQL Server 服务代理
我正在将控制台应用程序转换为从SQL Server 2005 中的Service Broker运行。
该应用程序大量使用DataSet。
数据集应该在SQLCLR中工作吗?如何定义要使用的连接?有这方面的文件吗?
谢谢你的帮助!
sql-server - 从 SQL CLR 程序集返回记录集?
伙计们租帮助我,我想我很接近,但我错过了一些东西。
背景
我正在重写一个 SQL CLR 程序集(存储过程),我的程序集联系另一个资源并取回 XML。我想将此 XML 作为记录集返回,而不是标量值。
从我所见,这是返回记录集的方法:
Send方法接受 3 个可能的参数:
SqlDataReader类没有构造函数,SqlCommand.ExecuteReader()如何返回一个?
我认为我需要做的
- 创建我自己的继承自 IDataReader的类。
- 使此类使用 XML,并将其公开为记录(如 DataReader)。
- 覆盖 SqlDataReader 并将其传递给 SqlContext.Pipe.Send(mySqlDataReader) ???
这是它变得模糊的地方。
如何将我的自定义记录集返回给 SQL Server?
sql-server - SQLCLR 中的数据访问模式
我在我的项目中使用了 SQLCLR,并且,为了记录,我对它非常满意。但是,对于良好的数据访问模式,我找不到任何好的信息来源。
通常我使用存储过程在 .net 和 SQL 之间进行通信,因为我总是想要一个用于我的数据库的 API。但是,在这种情况下,.net 代码是 API 的一部分,因此 SP 看起来很糟糕。
SQL server 中不存在 Linq2SQL(尽管它可以通过 DBA 不喜欢的方式安装),所以它不是一个选项。
我目前拥有的是我的代码与标准 ADO.NET 代码一样混乱
而且,尽管它有效,但它似乎非常像错误的方法。
其他人是如何做到的?
c# - 如何通知 Windows 服务(c#)数据库表更改(sql 2005)?
我在 SQL2005 数据库中有一个负载很重的表(许多插入/更新/删除)。我想尽可能接近实时地对所有这些更改进行一些后期处理(异步以免以任何方式锁定表)。我已经查看了许多可能的解决方案,但似乎无法找到一个感觉正确的巧妙解决方案。
这种后期处理也相当繁重,以至于 Windows 侦听器服务实际上会将处理传递给许多机器。然而,这部分应用程序已经启动并运行,完全异步,而不是我需要帮助的地方——我只想提一下,因为它影响了设计决策,因为我们不能只在DB完成处理。
所以,简单的问题仍然存在:表中的数据更改,我想在远程服务器上用 c# 代码进行一些处理。
目前我们已经想出了使用 sql 触发器,它执行“xp_cmdshell”来启动一个 exe,该 exe 引发 Windows 服务正在侦听的事件。这只是感觉不好。
然而,我在网上看到的其他解决方案也感觉相当复杂。例如,设置 SQLCacheDependancy 还需要设置服务代理。另一种可能的解决方案是使用 CLR 触发器,它可以调用 web 服务,但是网上有很多警告说这是一种不好的方法,尤其是在性能至关重要的时候。
理想情况下,我们不会依赖表更改,而是会拦截应用程序内部的调用并从那里通知服务,不幸的是,尽管我们有一些遗留应用程序也对数据进行更改,并且监控表是唯一集中的地方此时此刻。
非常感激任何的帮助。
概括:
- 需要实时响应表数据变化
- 性能至关重要
- 预计会有高流量
- 轮询和计划任务不是一个选项(或实时)
- 实施服务代理太大(但可能是唯一的解决方案?)
- CLR 代码尚未排除,但如果建议,则需要 perfomant
- 监听器/监视器可能是远程机器(可能是同一个物理网络)
sql-server - 为什么 SQL Server 不将我的程序集注册为 SAFE?
在 SQL Server 2008 上,我试图注册一个似乎只引用受支持的库的程序集。这是我用来注册程序集的 T-SQL 代码:
这会导致以下错误:
消息 6509,级别 16,状态 31,第 1 行从具有 HRESULT 0x80004005 的程序集“空间”收集元数据时发生错误。
但是,如果我添加with permission_set=unsafe
,那么 SQL 将成功执行命令。如何找出错误发生的原因,或者为什么我的程序集必须注册为不安全?
sql-server-2005 - Sql 2005 CLR 集成 - 是否支持动态程序集加载?
我有一个静态类,它动态加载 .NET 程序集(使用Assembly.LoadFile
方法)我收到以下错误消息:
.
当我尝试使用此声明分配 CAS 安全性时
相反,我得到了这个异常
注意:我已经为我的 SQL Server 服务帐户提供了对磁盘上动态程序集文件的“完全访问权限”。我使用语法复制了我的动态程序集:
转动TRUSTWORTHY ON
和设置后,PERMISSION_SET = UNSAFE
我现在得到了这个异常
sql - 创建程序集后需要 DLL?
我可以在创建程序集后删除 DLL-File C:\PATH\TO\DLL\FILE.DLL
?
删除文件后一切似乎都正常。但
在名称列中显示文件的路径。这会导致问题吗?(或者是DLL的内容存储在数据库中)
asp.net - 如何找到支持启用 CLR 的 SQL Server 的 ASP.NET 托管公司?
因此,我在 ASP.NET 和 SQL Server 2008 中开发了一个 Web 应用程序。我将部分 SQL 代码实现为 .NET 程序集(而不是 t-sql),因为它执行的密集计算最好用 C# 编写。
现在我已准备好部署我的应用程序,但我一直在寻找允许这样做的托管公司。划出折扣 ASP(请参阅此论坛帖子)。我尝试向其他托管公司发送电子邮件,但要么没有得到回复,要么他们说他们不会支持。
有什么建议吗?在 SQL Server 中启用 CLR 有什么大不了的?
sql-server - 索引如何在 SQL 用户定义类型 (UDT) 上工作?
这一直困扰着我一段时间,我希望 SQL Server 专家之一可以对此有所了解。
问题是:
当您索引包含 UDT(CLR 类型)的 SQL Server 列时,SQL Server 如何确定对给定查询执行的索引操作?
具体来说,我正在考虑hierarchyid
(AKA SqlHierarchyID
) 类型。Microsoft 建议您使用它的方式 - 以及我使用它的方式 - 是:
在列本身上创建索引
hierarchyid
(我们称之为ID
)。这启用了深度优先搜索,因此当您编写 时WHERE ID.IsDescendantOf(@ParentID) = 1
,它可以执行索引查找。创建一个持久计算
Level
列并在(Level, ID)
. 这启用了广度优先搜索,因此当您编写 时WHERE ID.GetAncestor(1) = @ParentID
,它可以为此表达式执行索引查找(在第二个索引上)。
但我不明白这怎么可能? 它似乎违反了正常的查询计划规则 - 调用GetAncestor
并且IsDescendantOf
似乎不是 sargable,所以这应该会导致完整的索引扫描,但事实并非如此。显然,我并不是在抱怨,而是我试图了解是否可以在我自己的 UDT 上复制此功能。
仅仅是hierarchyid
SQL Server 有特殊意识的一种“神奇”类型,如果找到查询元素和索引的某种组合,它会自动更改执行计划?还是CLR 类型只是定义了 SQL Server 引擎可以理解的SqlHierarchyID
特殊属性/方法(类似于持久计算列的工作方式)?IsDeterministic
我似乎找不到任何有关此的信息。我所能找到的只是一段说明该IsByteOrdered
属性通过保证每个实例的唯一表示来使索引和检查约束之类的事情成为可能;虽然这有点有趣,但它并没有解释 SQL Server 如何能够使用某些实例方法执行搜索。
那么问题又来了 - 索引操作如何适用于类似的类型hierarchyid
,是否有可能在新的 UDT 中获得相同的行为?
c# - 为什么我们使用 CLR 程序
为什么我们使用 CLR 程序。CLR 程序或任何 CLR 程序是唯一解决方案的示例是否有任何意义?