Come hai notato, System.Web
è una libreria non supportata. Per fare riferimento System.Web
devi fare una chiamata a CREATE ASSEMBLY
. Sembra che tu ci abbia provato, ma come hai fatto riferimento alla posizione di System.Web.dll
? L'hai copiato / incollato in un'altra posizione? SQL Server tenterà di individuare gli assembly dipendenti nella stessa posizione. In altre parole, se fai riferimento alla posizione di System.Web.dll
con tutte le altre librerie dipendenti che vivono nella stessa directory, dovrebbe funzionare bene. Ecco un esempio funzionante. Sono stato in grado di aggiungere sia l' System.Web
assembly che l'assemblaggio:
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
Dai messaggi client è possibile visualizzare tutti gli altri assembly caricati da SQL Server. Ma prendi nota, SQL Server visualizza il seguente avviso per ognuno di questi:
la registrazione non è stata completamente testata nell'ambiente ospitato di SQL Server e non è supportata. In futuro, se si aggiorna o si esegue la manutenzione di questo assembly o .NET Framework, la routine di integrazione CLR potrebbe smettere di funzionare. Per ulteriori dettagli, consultare la documentazione online di SQL Server.
Allo stesso modo, ma aggiungendo System.Web
, dai un'occhiata ai seguenti assiemi aggiunti:
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 la pena prestare attenzione a ciò che sta realmente accadendo qui, e anche se gli altri assembly aggiuntivi non hanno modi per i punti di ingresso T-SQL, ora sono una dipendenza. Vorrei soppesare le opzioni per vedere se hai davvero bisogno di fare riferimentoSystem.Web
o se esiste un altro percorso per realizzare ciò che desideri.