Como você observou, System.Webé uma biblioteca não suportada. Para fazer referência, System.Webvocê precisará fazer uma chamada para CREATE ASSEMBLY. Parece que você tentou isso, mas como você fez referência à localização System.Web.dll? Você copiou / colou em um local diferente? O SQL Server tentará localizar os assemblies dependentes no mesmo local. Em outras palavras, se você fizer referência à localização de System.Web.dlltodas as outras bibliotecas dependentes que vivem no mesmo diretório, ela deverá funcionar perfeitamente. Aqui está um exemplo de trabalho. Consegui adicionar tanto a System.Webmontagem quanto a sua:
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
Você pode ver nas mensagens do cliente todos os outros assemblies que o SQL Server carrega. Mas observe, o SQL Server exibe o seguinte aviso para cada um deles:
você está se registrando não é totalmente testado no ambiente hospedado do SQL Server e não é suportado. No futuro, se você atualizar ou reparar esse assembly ou o .NET Framework, sua rotina de integração do CLR poderá parar de funcionar. Consulte os Manuais Online do SQL Server para obter mais detalhes.
Da mesma forma, mas adicionando System.Web, dê uma olhada nos seguintes assemblies adicionados:
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
Vale a pena ficar atento ao que realmente está acontecendo aqui, e mesmo que os outros assemblies adicionais não possuam formas para os pontos de entrada do T-SQL, eles agora são uma dependência. Eu ponderaria as opções para ver se você realmente precisa fazer referênciaSystem.Web ou se há outra rota para realizar o que deseja.