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

sql-server - 使用 SQL Server 代理嵌入业务逻辑和调度执行的 SQL Server CLR

我在 C# 类库中有类似工作流的应用程序的业务逻辑,但是在每个月末需要调用库中的某些进程,我认为调用此计划执行的理想机制是使用 Sql 服务器代理(最好是 sql 作业,尽管如果绝对需要,我什至愿意进入 SSIS 地狱),但问题是我如何从 sql 作业调用应用程序库的进程?

应用程序库也用于 asp.net 页面,因此它通常有一个 Web 应用程序上下文 (web.config),其中配置了输入和输出数据库

我明白步骤或多或少

1)将类库嵌入到sql server CLR程序集中,强键签名并部署它2)调用库

我不清楚的是,在部署这样的 CLR 程序集时,Web 应用程序上下文会发生什么?我该如何使用适当的 app.config 来部署 CLR?如果我需要更改连接字符串,是否必须重新部署 CLR?

我也不确定,因为 CLR 需要连接回正在调用它的数据库(出于读取和写入表的目的),但我猜人们必须格外小心,以避免自我调用之类的事情。

0 投票
6 回答
54760 浏览

sql-server - SQL Server:如何列出所有 CLR 函数/过程/对象以进行组装

问题:在 SQL Server 2005 中,如何列出所有使用程序集 xy(例如 MyFirstUdp)的 SQL CLR 函数/过程?

例如,为查询参数 MyFirstUdp 列出 HelloWorld 的函数

我跑了之后

我可以列出所有程序集和所有函数/程序,但我似乎无法将程序集与函数/程序相关联...

0 投票
2 回答
3934 浏览

sql - SQL 语法错误 CREATE PROCEDURE AS EXTERNAL

问题:如果我将 IF not exists 添加到创建过程作为外部名称语句,我会收到语法错误...为什么?如果我分别运行它们,这两个语句都可以正常工作......

0 投票
3 回答
4802 浏览

c# - 对 SQL 2005 中的程序集使用 WITH PERMISSION_SET = UNSAFE 是不是很糟糕?

我需要使用 SQLCLR 来制作一个使用 .NET 3.5 中的东西的存储过程。如果我不使用PERMISSION_SET = UNSAFE我做不到,它就会死掉并给我这个错误:

部署错误 SQL01268:.Net SqlClient
数据提供程序:消息 6503,级别 16,状态 12,第 1 行
程序集“system.core,版本=3.5.0.0,文化=中性,publickeytoken=b77a5c561934e089。” 在 SQL 目录中找不到。
执行批处理时发生错误。

于是我找到了这篇文章:

http://weblogs.asp.net/paulomorgado/archive/2009/06/13/playing-with-sql-server-clr-integration-part-iv-deploying-to-sql-server-2005.aspx

最后一行是这样说的:

“现在 DBA 肯定不会让我使用它,但构建它很有趣。”

我不确定他是否指的是权限设置为“不安全”。

那么,如果你这样做,会出现一些巨大的缺口吗?

0 投票
1 回答
2098 浏览

c# - 如何使这个 CLR 与 2005 一起工作?

我正在尝试为使用 .net 3.5 程序集的 sql 2005 数据库创建一个 clr 存储过程

因此,首先我必须更改 sql 2005 以将 system.core 识别为不安全的,这是我不太满意的(我宁愿让它说安全)。

现在我得到这个错误

这是我的代码

我不知道如何将日期时间传递给它,所以我使用了一个字符串然后对其进行了转换。

0 投票
1 回答
270 浏览

sql-server - 我想知道,哪些列已经真正改变了

我在 SQLCLR 程序集中实现了一个后触发器。在其中我想知道哪些列已经真正更新(并且它们的值已经改变)。

不幸的是,SqlContext.TriggerContext.IsUpdatedColumn 返回 true,即使列值仍然相同。我想,这只是因为一个不太智能的服务器应用程序准备的 SQL 查询重写了所有列,即使其中一些列没有被用户更改。

第二个问题是某些列具有 ntext 类型,因此我什至无法从 INSERTED 伪表中选择它们(MS SQL Server 不允许从 INSERTED 中选择具有 ntext 类型的字段)。这就是为什么现在我 SELECT 使用以下查询更改了行:

我应该怎么做才能知道,哪些列不仅更新了,而且改变了?

现在我有一个简单的想法:创建另一个触发器,BEFORE,并从内部保存更新的行。然后,当执行 AFTER 触发器时,比较列值。这个想法是我能做的最好的事情吗?如果是这样,在 BEFORE 和 AFTER 触发器之间保留更改的行的最佳位置是什么?在执行 AFTER 触发器之前将删除一个临时表,因为我关闭了上下文连接(也许,只是不关闭?)。

0 投票
3 回答
106 浏览

c# - 将项目转换为 SQL Server,设计思路?

目前,我正坐在一个用 Access 编写的丑陋业务应用程序上,该应用程序每天两次获取电子表格并将其导入 MDB。我目前正在将一个包含此内容的主要项目转换为 SQL Server 和 .net,特别是在 c# 中。

为了容纳这些信息,有两个表(此处为别名),我将它们称为 Master_Prod 和 Master_Sheet,它们连接到 Master_Prod 表 ProdID 的身份密钥父级。还有另外两个表来存储历史记录,History_Prod 和 History_Sheet。Master_Prod 之外还有更多的表,但出于解释目的,将其限制为两个表。

由于这是用 Access 编写的,因此处理此文件的子例程充满了手动编码的触发器,以处理过去和一直难以跟上的历史,这是我很高兴将其转移到数据库服务器的一个原因而不是 RAD 工具。我正在编写触发器来处理历史跟踪。

我的计划是/是创建一个对电子表格进行建模的对象,将数据解析到其中并使用 LINQ 在将数据发送到服务器之前进行一些客户端检查......基本上我需要将工作表中的数据与匹配的数据进行比较记录(除非不存在,否则它是新的)。如果任何字段已更改,我想发送更新。

最初我希望将此过程放入某种接受 IEnumerable 列表的 CLR 程序集中,因为我已经有了这种形式的电子表格,但我最近了解到这将与一个相当重要的数据库服务器配对,我我非常担心陷入困境。

这值得放入 CLR 存储过程吗?还有其他数据进入的入口点,如果我可以构建一个过程来处理传入的对象,那么我可以从应用程序中删除很多业务规则,但会牺牲潜在的数据库性能。

基本上我想把更新检查从客户端拿走,然后把它放在数据库上,这样数据系统就可以管理表是否应该更新,这样历史触发器就可以触发了。

是否有沿同一方向实施的更好方法的想法?

0 投票
1 回答
1745 浏览

c# - SQL CLR 如何访问在安全模式下运行的用户名、主机名和 app_name

我有一个用 sql clr (sql 2005, .net 3.5) 编写的触发器,我需要获取用户名、主机名和 app_name。在 TSQL 中,我会简单地使用

在我的 .Net 代码中,我尝试过

但在安全模式下运行我无权访问这些属性中的任何一个。关于如何实现这一点的任何想法?

谢谢

0 投票
1 回答
1735 浏览

sql-server - SQL Server 2008:执行尝试通过连接访问数据库的 CLR 函数时出现异常

我想在 SQL Server 2008 中使用 CLR 表值函数,它从内部访问数据库。我有一个许可例外。我正在尝试以与创建它的用户相同的用户身份执行功能。所以问题的原因不清楚..

这是功能:

这是例外

0 投票
3 回答
1046 浏览

sql-server - T-SQL 触发器调用 SQLCLR 存储过程与 SQLCLR 触发器

从常规 T-SQL 触发器调用 SQLCLR 存储过程而不是直接部署 SQLCLR 触发器有什么好处吗?

我需要StatusID在一个非常大的表中收到特定列更改 ( ) 的通知。

当前使用了许多 Windows 服务。每个监控自己的 StatusID,即查询 db 以获取特定的StatusID: SELECT a,b,c FROM t WHERE StatusID = @status

我想尝试将逻辑从服务移动到 SQLCLR 程序集,并使用 SQLCLR 触发器调用它们。这是个好主意吗?有更好的想法吗?