Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le stored procedure estese, incluse come librerie a collegamento dinamico (DLL), consentono di estendere le funzionalità di SQL Server tramite funzioni sviluppate con Visual C++. Le stored procedure estese vengono implementate come funzioni all'interno delle DLL. Oltre alle funzioni, le stored procedure estese possono anche definire tipi definiti dall'utente e funzioni di aggregazione, ad esempio SUM o AVG.
Quando un client esegue una stored procedure estesa, SQL Server cerca la DLL associata alla stored procedure estesa e carica la DLL. SQL Server chiama la stored procedure estesa richiesta ed esegue la stored procedure in un contesto di sicurezza specificato. La stored procedure estesa passa quindi i set di risultati e restituisce i parametri al server.
SQL Server fornisce estensioni a Transact-SQL (T-SQL) per consentire l'installazione di assembly verificabili in SQL Server. Il set di autorizzazioni di SQL Server specifica il contesto di sicurezza, con i livelli di sicurezza seguenti:
Modalità senza restrizioni: eseguire codice a proprio rischio; il codice non deve essere verificabile indipendente dai tipi.
Modalità provvisoria: eseguire codice typesafe verificabile; compilato con /clr:safe.
Importante
Visual Studio 2015 deprecato e Visual Studio 2017 non supporta la creazione /clr:pure e /clr:safe di progetti verificabili. Se è necessario codice verificabile, è consigliabile convertire il codice in C#.
Per creare e caricare un assembly verificabile in SQL Server, usare i comandi Transact-SQL CREATE ASSEMBLY e DROP ASSEMBLY come indicato di seguito:
CREATE ASSEMBLY <assemblyName> FROM <'Assembly UNC Path'> WITH
PERMISSION_SET <permissions>
DROP ASSEMBLY <assemblyName>
Il comando PERMISSION_SET specifica il contesto di sicurezza e può avere i valori UNRESTRICTED, SAFE o EXTENDED.
Inoltre, è possibile usare il comando CREATE FUNCTION per eseguire l'associazione ai nomi dei metodi in una classe:
CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]
Esempio
Lo script SQL seguente (ad esempio, denominato "MyScript.sql") carica un assembly in SQL Server e rende disponibile un metodo di una classe:
-- Create assembly without external access
drop assembly stockNoEA
go
create assembly stockNoEA
from
'c:\stockNoEA.dll'
with permission_set safe
-- Create function on assembly with no external access
drop function GetQuoteNoEA
go
create function GetQuoteNoEA(@sym nvarchar(10))
returns real
external name stockNoEA:StockQuotes::GetQuote
go
-- To call the function
select dbo.GetQuoteNoEA('MSFT')
go
Gli script SQL possono essere eseguiti in modo interattivo in SQL Query Analyzer o nella riga di comando con l'utilità sqlcmd.exe. La riga di comando seguente si connette a MyServer, usa il database predefinito, usa una connessione attendibile, input MyScript.sql e output MyResult.txt.
sqlcmd -S MyServer -E -i myScript.sql -o myResult.txt