Freigeben über


Übersicht über die CLR-Integration

CLR (Common Language Runtime) steht im Mittelpunkt von Microsoft .NET Framework und stellt die Ausführungsumgebung für sämtlichen .NET Framework-Code bereit. In CLR geschriebener Code wird als verwalteter Code bezeichnet. CLR stellt verschiedene Funktionen und Dienste für die Programmausführung bereit, unter anderem Just-In-Time-Kompilierung (JIT), Speicherzuordnung und -verwaltung, Erzwingen der Typsicherheit, Ausnahmebehandlung, Threadverwaltung und Sicherheit. Informationen hierzu finden Sie im .NET Framework-SDK.

Mit der von Microsoft SQL Server gehosteten CLR ("CLR-Integration" genannt) können Sie gespeicherte Prozeduren, Trigger, benutzerdefinierte Funktionen, benutzerdefinierte Typen (UDT) und benutzerdefinierte Aggregate in verwaltetem Code erstellen. Da verwalteter Code vor der Ausführung in systemeigenen Code kompiliert wird, können Sie in manchen Fällen einen erheblichen Leistungsanstieg erreichen.

Verwalteter Code verwendet die Codezugriffssicherheit (Code Access Security, CAS), um Assemblys an der Ausführung bestimmter Vorgänge zu hindern. SQL Server verwendet die Codezugriffssicherheit, um zur Sicherheit des verwalteten Codes beizutragen und eine Gefährdung des Betriebssystems oder des Datenbankservers zu vermeiden.

Vorteile der CLR-Integration

Transact-SQL ist ausdrücklich für direkten Datenzugriff und die direkte Datenbearbeitung in der Datenbank vorgesehen. Während Transact-SQL für den Datenzugriff und die Datenverwaltung ideal geeignet ist, handelt es sich dabei nicht um eine vollständige Programmiersprache. Beispielsweise unterstützt Transact-SQL keine Arrays, Auflistungen, For-Each-Schleifen, Bit-Verschiebungen oder Klassen. Bestimmte dieser Konstrukte können in Transact-SQL simuliert werden; verwalteter Code verfügt über eine integrierte Unterstützung dieser Konstrukte. Je nach Szenario können diese Features einen zwingenden Grund darstellen, bestimmte Datenbankfunktionalitäten in verwaltetem Code zu implementieren.

Microsoft Visual Basic .NET und Microsoft Visual C# bieten objektorientierte Funktionen wie z. B. Kapselung, Vererbung und Polymorphie. Damit verbundener Code kann jetzt leicht in Klassen und Namespaces organisiert werden. Wenn Sie mit großen Datenmengen an Servercode arbeiten, können Sie auf diese Weise Ihren Code leichter organisieren und instand halten.

Verwalteter Code eignet sich besser als Transact-SQL für Berechnungen und komplizierte Ausführungslogik und bietet weitreichende Unterstützung für zahlreiche komplexe Tasks wie Zeichenfolgenbehandlung und reguläre Ausdrücke. Mit der Funktionalität, die in der .NET Framework -Bibliothek zur Verfügung steht, haben Sie Zugriff auf Tausende von vorgefertigten Klassen und Routinen. Auf diese Klassen und Routinen können Sie von jeder gespeicherten Prozedur, jedem Trigger und jeder benutzerdefinierten Funktion aus zugreifen. Die Basisklassenbibliothek (Base Class Library, BCL) enthält u. a. Klassen mit Funktionen zur Zeichenfolgenbearbeitung, für erweiterte mathematische Vorgänge, den Dateizugriff, die Kryptografie.

HinweisHinweis

Viele dieser Klassen können ausgehend vom CLR-Code in SQL Server verwendet werden. Klassen, die nicht für eine serverseitige Verwendung geeignet sind (beispielsweise Window-Klassen) sind auf diese Weise nicht verfügbar. Weitere Informationen finden Sie unter Unterstützte .NET Framework-Bibliotheken.

Einer der Vorteile von verwaltetem Code besteht in der Typsicherheit, d. h. die Gewissheit, dass der Code nur in einer genau definierten und zulässigen Weise auf Typen zugreift. Bevor verwalteter Code ausgeführt wird, überprüft die CLR, dass der Code sicher ist. Beispielsweise wird der Code dahingehend überprüft, dass kein Speicher gelesen wird, der nicht zuvor geschrieben wurde. Die CLR kann auch dazu beitragen, sicherzustellen, dass der Code nicht verwalteten Speicher bearbeitet.

Die CLR-Integration bietet das Potenzial zu verbesserter Leistung. Weitere Informationen finden Sie unter Leistungsfähigkeit der CLR-Integration.

Transact-SQL oder verwalteter Code?

Beim Erstellen von gespeicherten Prozeduren, Triggern und benutzerdefinierten Funktionen müssen Sie zunächst entscheiden, ob Sie dazu das traditionelle Transact-SQL oder eine .NET Framework-Programmiersprache wie Visual Basic .NET oder Visual C# einsetzen möchten. Verwenden Sie Transact-SQL, wenn der Code hauptsächlich Datenzugriffe mit wenig oder keiner prozeduralen Logik ausführen soll. Verwenden Sie verwalteten Code für CPU-intensive Funktionen und Prozeduren, die eine komplexe Logik aufweisen, oder in Fällen, in denen Sie auf die Basisklassenbibliothek (Base Class Library, BCL) von .NET Framework zurückgreifen möchten.

Ausführen im Server oder im Client?

Ein weiterer Entscheidungsfaktor zwischen Transact-SQL und verwaltetem Code ist der Speicherort des Codes: auf dem Servercomputer oder auf dem Clientcomputer. Sowohl Transact-SQL als auch verwalteter Code können auf dem Server ausgeführt werden. Dies hält Code und Daten näher zusammen und ermöglicht Ihnen außerdem, die Verarbeitungskapazität des Servers auszunutzen. Andererseits möchten Sie möglicherweise vermeiden, prozessorintensive Tasks auf dem Datenbankserver zu platzieren. Die meisten Clientcomputer sind heute ebenfalls sehr leistungsfähig, was Sie ausnutzen könnten, indem Sie soviel Code wie möglich auf einem Clientcomputer ablegen. Verwalteter Code kann auf einem Clientcomputer ausgeführt werden, nicht aber Transact-SQL-Code.

Erweiterte gespeicherte Prozeduren oder verwalteter Code?

Erweiterte gespeicherte Prozeduren werden erstellt, um Funktionen auszuführen, die mit gespeicherten Transact-SQL-Prozeduren nicht möglich sind. Erweiterte gespeicherte Prozeduren können jedoch die Integrität des SQL Server-Prozesses beeinträchtigen, während verwalteter Code auf Typsicherheit überprüft wird und daher keine Gefährdung darstellt. Darüber hinaus sind Speicherverwaltungsfunktionen, Planung von Threads und Fibers und Synchronisierungsdienste des verwalteten Codes der CLR und SQL Server besser integriert. Die CLR-Integration bietet mehr Sicherheit als erweiterte gespeicherte Prozeduren beim Erstellen der gespeicherten Prozeduren, die Sie benötigen, um Tasks auszuführen, die in Transact-SQL nicht möglich sind. Weitere Informationen zu CLR-Integration und erweiterte gespeicherte Prozeduren finden Sie unter Leistungsfähigkeit der CLR-Integration.