您已经注意到,System.Web
是不受支持的库。为了参考,System.Web
您需要致电CREATE ASSEMBLY
。似乎您尝试过该方法,但是如何参考位置System.Web.dll
?您是否将其复制/粘贴到其他位置?SQL Server将尝试在同一位置查找相关程序集。换句话说,如果您将System.Web.dll
所有其他依赖库的位置都引用在同一目录中,则它应该可以正常工作。这是一个工作示例。我既可以添加该System.Web
程序集,也可以添加您的程序集:
create assembly [System.Web]
from 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Web.dll'
with permission_set = unsafe;
go
create assembly SystemWebTest
from 'c:\SqlServer\SystemWebTest.dll'
with permission_set = safe;
go
您可以从客户端消息中看到SQL Server加载的所有其他程序集。但是请注意,SQL Server为每个警告显示以下警告:
您正在注册的代码尚未在SQL Server托管环境中经过全面测试,因此不受支持。将来,如果您升级或维护该程序集或.NET Framework,则CLR集成例程可能会停止工作。有关更多详细信息,请参考SQL Server联机丛书。
同样,但要添加System.Web
,请查看添加的以下程序集:
select
name,
permission_set_desc,
is_visible
from sys.assemblies
where is_user_defined = 1
order by is_visible desc;
name permission_set_desc is_visible
System.Web UNSAFE_ACCESS 1
SystemWebTest SAFE_ACCESS 1
Microsoft.Build.Framework UNSAFE_ACCESS 0
System.Xaml UNSAFE_ACCESS 0
System.ComponentModel.DataAnnotations UNSAFE_ACCESS 0
System.Runtime.Caching UNSAFE_ACCESS 0
System.Web.ApplicationServices UNSAFE_ACCESS 0
System.Drawing UNSAFE_ACCESS 0
Microsoft.Build.Utilities.v4.0 UNSAFE_ACCESS 0
System.DirectoryServices UNSAFE_ACCESS 0
System.DirectoryServices.Protocols UNSAFE_ACCESS 0
System.EnterpriseServices UNSAFE_ACCESS 0
System.Runtime.Remoting UNSAFE_ACCESS 0
System.Runtime.Serialization.Formatters.Soap UNSAFE_ACCESS 0
System.Design UNSAFE_ACCESS 0
System.Windows.Forms UNSAFE_ACCESS 0
Accessibility UNSAFE_ACCESS 0
System.Drawing.Design UNSAFE_ACCESS 0
System.Web.RegularExpressions UNSAFE_ACCESS 0
Microsoft.Build.Tasks.v4.0 UNSAFE_ACCESS 0
System.ServiceProcess UNSAFE_ACCESS 0
System.Configuration.Install UNSAFE_ACCESS 0
System.Runtime.Serialization UNSAFE_ACCESS 0
System.ServiceModel.Internals UNSAFE_ACCESS 0
SMDiagnostics UNSAFE_ACCESS 0
值得留意这里实际发生的事情,即使其他附加程序集没有T-SQL入口点的方法,它们现在也是依赖项。我会权衡一下这些选项,以查看您是否真的需要参考System.Web
,或者是否有另一种途径可以完成您想要的工作。