Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erweiterte gespeicherte Prozeduren, die als DlLs (Dynamic Link Libraries) verpackt sind, bieten eine Möglichkeit zum Erweitern der SQL Server-Funktionalität durch Funktionen, die mit Visual C++ entwickelt wurden. Erweiterte gespeicherte Prozeduren werden als Funktionen innerhalb von DLLs implementiert. Zusätzlich zu Funktionen können erweiterte gespeicherte Prozeduren auch benutzerdefinierte Typen und Aggregatfunktionen (z. B. SUMME oder AVG) definieren.
Wenn ein Client eine erweiterte gespeicherte Prozedur ausführt, sucht SQL Server nach der DLL, die der erweiterten gespeicherten Prozedur zugeordnet ist, und lädt die DLL. SQL Server ruft die angeforderte erweiterte gespeicherte Prozedur auf und führt sie unter einem angegebenen Sicherheitskontext aus. Die erweiterte gespeicherte Prozedur übergibt dann Resultsets und gibt Parameter zurück an den Server zurück.
SQL Server stellt Erweiterungen für Transact-SQL (T-SQL) bereit, damit Sie überprüfbare Assemblys in SQL Server installieren können. Der SQL Server-Berechtigungssatz gibt den Sicherheitskontext mit den folgenden Sicherheitsstufen an:
Uneingeschränkter Modus: Ausführen von Code auf eigene Gefahr; Code muss nicht nachprüfbar typsicher sein.
Abgesicherter Modus: Führen Sie nachprüfbar typsicheren Code aus; kompiliert mit /clr:safe.
Wichtig
Visual Studio 2015 ist veraltet und Visual Studio 2017 unterstützt nicht die sichere Erstellung von überprüfbaren Projekten /clr:pure und /clr:safe . Wenn Sie überprüfbaren Code benötigen, empfehlen wir Ihnen, Ihren Code in C# zu übersetzen.
Verwenden Sie die Transact-SQL-Befehle CREATE ASSEMBLY und DROP ASSEMBLY wie folgt, um eine überprüfbare Assembly in SQL Server zu erstellen und zu laden:
CREATE ASSEMBLY <assemblyName> FROM <'Assembly UNC Path'> WITH
PERMISSION_SET <permissions>
DROP ASSEMBLY <assemblyName>
Der Befehl PERMISSION_SET gibt den Sicherheitskontext an und kann die Werte "UNRESTRICTED", "SAFE" oder "EXTENDED" aufweisen.
Darüber hinaus können Sie den BEFEHL CREATE FUNCTION verwenden, um an Methodennamen in einer Klasse zu binden:
CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]
Beispiel
Das folgende SQL-Skript (z. B. "MyScript.sql") lädt eine Assembly in SQL Server und stellt eine Methode einer Klasse zur Verfügung:
-- 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-Skripts können interaktiv in sql Query Analyzer oder in der Befehlszeile mit dem Hilfsprogramm sqlcmd.exe ausgeführt werden. Die folgende Befehlszeile stellt eine Verbindung mit MyServer her, verwendet die Standarddatenbank, verwendet eine vertrauenswürdige Verbindung, Eingaben MyScript.sql und gibt MyResult.txt aus.
sqlcmd -S MyServer -E -i myScript.sql -o myResult.txt