Używanie zestawów weryfikowalnych z programem SQL Server (C++/CLI)

Rozszerzone procedury składowane, spakowane jako biblioteki linków dynamicznych (DLL), zapewniają sposób rozszerzania funkcjonalności programu SQL Server za pomocą funkcji opracowanych za pomocą języka Visual C++. Rozszerzone procedury składowane są implementowane jako funkcje wewnątrz bibliotek DLL. Oprócz funkcji rozszerzone procedury składowane mogą również definiować typy zdefiniowane przez użytkownika i funkcje agregujące (takie jak SUM lub AVG).

Gdy klient wykonuje rozszerzoną procedurę składowaną, program SQL Server wyszukuje bibliotekę DLL skojarzona z rozszerzoną procedurą składowaną i ładuje bibliotekę DLL. Program SQL Server wywołuje żądaną rozszerzoną procedurę składowaną i wykonuje ją w określonym kontekście zabezpieczeń. Rozszerzona procedura składowana następnie przekazuje zestawy wyników i zwraca parametry z powrotem do serwera.

Program SQL Server udostępnia rozszerzenia języka Transact-SQL (T-SQL), aby umożliwić instalowanie zestawów weryfikowalnych w programie SQL Server. Zestaw uprawnień programu SQL Server określa kontekst zabezpieczeń z następującymi poziomami zabezpieczeń:

  • Tryb nieograniczony: uruchamianie kodu na własne ryzyko; kod nie musi być weryfikowalny.

  • Tryb awaryjny: uruchom weryfikowalny kod typesafe; skompilowany za pomocą polecenia /clr:safe.

Ważne

Przestarzałe programy Visual Studio 2015 i Visual Studio 2017 nie obsługują plików /clr:pure i /clr:safe tworzenia weryfikowalnych projektów. Jeśli potrzebujesz weryfikowalnego kodu, zalecamy tłumaczenie kodu na język C#.

Aby utworzyć i załadować zestaw weryfikowalny do programu SQL Server, użyj poleceń języka Transact-SQL CREATE ASSEMBLY i DROP ASSEMBLY w następujący sposób:

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

Polecenie PERMISSION_SET określa kontekst zabezpieczeń i może mieć wartości UNRESTRICTED, SAFE lub EXTENDED.

Ponadto możesz użyć polecenia CREATE FUNCTION, aby powiązać nazwy metod w klasie:

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

Przykład

Następujący skrypt SQL (na przykład o nazwie "MyScript.sql") ładuje zestaw do programu SQL Server i udostępnia metodę klasy:

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

Skrypty SQL można wykonywać interaktywnie w analizatorze zapytań SQL lub w wierszu polecenia za pomocą narzędzia sqlcmd.exe. Poniższy wiersz polecenia łączy się z serwerem MyServer, używa domyślnej bazy danych, używa zaufanego połączenia, danych wejściowych MyScript.sql i danych wyjściowych MyResult.txt.

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

Zobacz też

Klasy i struktury