表值函数只返回 CLR 错误

Posted

技术标签:

【中文标题】表值函数只返回 CLR 错误【英文标题】:Table valued function only returns CLR error 【发布时间】:2010-04-27 03:23:18 【问题描述】:

我对为第三方闭源应用程序设置的数据库具有只读访问权限。一旦一组(希望)有用的表函数只返回错误:

无法初始化通用 语言运行时 (CLR) v2.0.50727 与 HRESULT 0x80131522。你需要 重新启动 SQL Server 以使用 CLR 集成功能。 (16 级)

但理论上,第三方应用程序应该能够(直接或间接)使用该功能,所以我确信我没有设置正确。

我是非常 SQL Server 新手,所以我可能会遗漏一些明显的东西。或者我可能会遗漏一些非常轻微的东西,我不知道。

以下是返回上述错误的查询示例:

SELECT * FROM 
dbo.UncompressDataDateRange(4,'Apr 24 2010 12:00AM','Apr 30 2010 12:00AM')

函数接受三个参数的地方:

    数据集 (int) -- 基本上数据有 6 个分类,应该从中提取的巨型表有一个列来指示哪个是哪个。

    开始日期 (smalldatetime)

    结束日期 (smalldatetime)

还有其他类似的函数基于相同的思想展开,都返回相同的错误。

速记:

我不确定这是否相关,但我能够通过 SQL Studio 连接到数据库(但没有权限将函数编写为代码),并检查了上述示例函数的依赖关系。事实证明,它依赖于我已经开始工作的视图,并且该视图依赖于更大、更复杂的数据表。

这让我觉得我应该以某种方式将函数指向视图的结果,但我没有看到任何说明如何完成的文档。

【问题讨论】:

我刚刚学习并尝试了 OUTER APPLY 子句,结果相同。我真的需要一些帮助。谢谢! 【参考方案1】:

错误消息似乎暗示:

You need to restart SQL server to use CLR integration features

可能是第 3 方安装程序启用了 CLR 集成,但无法重新启动 SQL Server。

【讨论】:

如果第 3 方应用程序自 2 月以来一直运行良好(而我上周刚刚开始对此进行探讨),是否还会出现这种情况?我的用户帐户是否需要明确启用 CLR?请记住,我花了两年时间解析从这个 3rd 方应用程序输出的 csv 文件,然后才获得足够的信任,最终可以直接访问它的数据库,所以我必须非常确定我之前已经消除了任何其他可能性我开始向远高于我工资等级的人提出服务器重启等请求,以查看是否能解决问题。 @Anthony:CLR 集成是将 .NET 代码(如 C#)导入 SQL Server。如果安装是 3 年,重新启动似乎不太可能修复。不过,错误消息似乎很清楚;也许没有启用 CLR 集成。至少,这意味着代码从来没有工作过。 因此,如果代码从未运行过,则表明该应用正在使用其他一些功能。真可惜。该应用程序已经存在至少三年,但几个月前已更新到更新版本,因此很可能添加了一些 .NET 操作。冒着听起来完全脱离循环的风险,当您说“将 .NET 代码导入 SQL Server”时,您的意思是在函数定义本身内吗?还是该函数希望我将 C♯ 中的某些内容传递给它? 我还发现了一个 MS 支持论坛线程,该线程建议当安全策略更改时会出现此错误,因为服务器正试图拉取一个不存在的程序集。这对我来说毫无意义,但由于添加了此用户帐户以便我可以访问,这是否值得将其带给系统管理员,或者听起来我在某处扔掉了误读的行话? @Anthony:“导入 .NET 代码”意味着指导 SQL Server 如何加载和运行 .NET 程序集(一个 .dll 文件)。如果您更改安全设置,则会出现错误是有道理的以阻止 SQL Server 加载库的方式。我会以重现它的方式呈现错误消息,并寻求帮助。有时我们都是白痴,当然是在 IT 领域,所以这本身就不应该害怕:)

以上是关于表值函数只返回 CLR 错误的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server中CLR表值函数(table-valued function)不能使用WITH(NOLOCK)

SQL CLR 函数返回错误尝试使用上下文创建表和插入行

从表值函数返回显式 Open XML 结果集

表值函数查询不能保存为视图

表值函数语法错误

为啥我在此 SQL Server 内联表值函数上收到 11555 错误?