Verifieerbare assembly's gebruiken met SQL Server (C++/CLI)

Uitgebreide opgeslagen procedures, verpakt als dynamic-linkbibliotheken (DLL's), bieden een manier om SQL Server-functionaliteit uit te breiden via functies die zijn ontwikkeld met Visual C++. Uitgebreide opgeslagen procedures worden geïmplementeerd als functies in DLL's. Naast functies kunnen uitgebreide opgeslagen procedures ook door de gebruiker gedefinieerde typen en statistische functies (zoals SOM of AVG) definiëren.

Wanneer een client een uitgebreide opgeslagen procedure uitvoert, zoekt SQL Server naar het DLL-bestand dat is gekoppeld aan de uitgebreide opgeslagen procedure en wordt het DLL-bestand geladen. SQL Server roept de aangevraagde uitgebreide opgeslagen procedure aan en voert deze uit onder een opgegeven beveiligingscontext. De uitgebreide opgeslagen procedure geeft vervolgens resultatensets door en retourneert parameters terug naar de server.

SQL Server biedt extensies voor Transact-SQL (T-SQL) zodat u verifieerbare assembly's in SQL Server kunt installeren. De SQL Server-machtigingenset geeft de beveiligingscontext op, met de volgende beveiligingsniveaus:

  • Onbeperkte modus: Voer code op eigen risico uit; code hoeft niet verifieerbaar type-veilig te zijn.

  • Veilige modus: Voer verifieerbare typesafe-code uit; gecompileerd met /clr:safe.

Belangrijk

Visual Studio 2015 afgeschaft en Visual Studio 2017 biedt geen ondersteuning voor de /clr:pure en /clr:veilige creatie van verifieerbare projecten. Als u verifieerbare code nodig hebt, raden we u aan uw code te vertalen naar C#.

Als u een verifieerbare assembly in SQL Server wilt maken en laden, gebruikt u de Transact-SQL opdrachten CREATE ASSEMBLY en DROP ASSEMBLY als volgt:

CREATE ASSEMBLY <assemblyName> FROM <'Assembly UNC Path'> WITH
  PERMISSION_SET <permissions>
DROP ASSEMBLY <assemblyName>

De opdracht PERMISSION_SET geeft de beveiligingscontext op en kan de waarden ONBEPERKT, VEILIG of UITGEBREID hebben.

Daarnaast kunt u de opdracht CREATE FUNCTION gebruiken om verbinding te maken met methodenamen in een klasse:

CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]

Voorbeeld

Met het volgende SQL-script (bijvoorbeeld met de naam 'MyScript.sql') wordt een assembly in SQL Server geladen en wordt een methode van een klasse beschikbaar gemaakt:

-- 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

SQL-scripts kunnen interactief worden uitgevoerd in SQL Query Analyzer of op de opdrachtregel met het hulpprogramma sqlcmd.exe. De volgende opdrachtregel maakt verbinding met MyServer, maakt gebruik van de standaarddatabase, maakt gebruik van een vertrouwde verbinding, invoer MyScript.sql en uitvoer MyResult.txt.

sqlcmd -S MyServer -E -i myScript.sql -o myResult.txt

Zie ook

Klassen en Structs