Implementieren von Assemblys

Dieser Abschnitt enthält Informationen zu folgenden Themen, die Sie beim Implementieren und Arbeiten mit Assemblys in der Datenbank unterstützen:

  • Erstellen von Assemblys

  • Ändern von Assemblys

  • Löschen, Deaktivieren und Aktivieren von Assemblys

  • Verwalten von Assemblyversionen

Erstellen von Assemblys

In SQL Server werden Assemblys mit der Transact-SQL-Anweisung CREATE ASSEMBLY erstellt. In SQL Server Management Studio mit dem Assembly-Editorassistenten. Darüber hinaus wird beim Bereitstellen eines SQL Server-Projekts in MicrosoftVisual Studio eine Assembly in der Datenbank registriert, die für das Projekt angegeben war. Weitere Informationen finden Sie unter Bereitstellen von CLR-Datenbankobjekten.

Erstellen einer Assembly mit Transact-SQL

Erstellen einer Assembly mit SQL Server Management Studio

Ändern von Assemblys

In SQL Server werden Assemblys mit der Transact-SQL-Anweisung ALTER ASSEMBLY geändert. In SQL Server Management Studio mit dem Assembly Assisted Editor. Eine Assembly können Sie wie folgt ändern:

  • Ändern der Implementierung der Assembly durch Hochladen einer neueren Version der Binärdateien der Assembly. Weitere Informationen finden Sie unter Verwalten von Assemblyversionen weiter unten in diesem Thema.

  • Ändern des Berechtigungssatzes der Assembly. Weitere Informationen finden Sie unter Entwerfen von Assemblys.

  • Ändern der Sichtbarkeit der Assembly. Sichtbare Assemblys sind in SQL Server für Verweise verfügbar. Nicht sichtbare Assemblys sind nicht verfügbar, dies gilt auch dann, wenn sie in die Datenbank hochgeladen wurden. Assemblys, die in eine Instanz von SQL Server hochgeladen wurden, sind standardmäßig sichtbar.

  • Hinzufügen oder Löschen einer der Assembly zugeordneten Debug- oder Quelldatei.

Ändern einer Assembly mit Transact-SQL

Ändern einer Assembly mit SQL Server Management Studio

Löschen, Deaktivieren und Aktivieren von Assemblys

Assemblys werden mit der Transact-SQL-Anweisung DROP ASSEMBLY oder mit SQL Server Management Studio gelöscht.

Löschen einer Assembly mit Transact-SQL

Löschen einer Assembly mit SQL Server Management Studio

Standardmäßig ist die Ausführung aller in SQL Server erstellten Assemblys deaktiviert. Mit der Option clr enabled oder mit der gespeicherten Systemprozedur sp_configure können Sie die Ausführung aller in SQL Server hochgeladenen Assemblys deaktivieren bzw. aktivieren. Die Deaktivierung der Assemblyausführung verhindert die Ausführung von CLR-Funktionen (Common Language Runtime), gespeicherter Prozeduren, Trigger, Aggregate und benutzerdefinierter Typen – gerade ausgeführte werden beendet. Die Deaktivierung der Assemblyausführung deaktiviert nicht die Möglichkeit, Assemblys zu erstellen, zu ändern oder zu löschen. Weitere Informationen finden Sie unter clr enabled (Option).

Deaktivieren und Aktivieren der Assemblyausführung

Verwalten von Assemblyversionen

Wenn eine Assembly in eine SQL Server-Instanz hochgeladen wird, wird es in den Datenbanksystemkatalogen gespeichert und verwaltet. Alle in Microsoft.NET Framework an der Definition der Assembly vorgenommenen Änderungen müssen in die im Datenbankkatalog gespeicherte Assembly übertragen werden.

Zum Ändern einer Assembly müssen Sie eine ALTER ASSEMBLY-Anweisung ausgeben, die die Assembly in der Datenbank aktualisiert. Dadurch wird die Assembly mit der aktuellsten Kopie der .NET Framework-Module aktualisiert, die ihre Implementierung enthalten.

Mit der WITH UNCHECKED DATA-Klausel der ALTER ASSEMBLY-Anweisung wird SQL Server angewiesen, auch die Assemblys zu aktualisieren, von denen in der Datenbank persistente Daten abhängen. WITH UNCHECKED DATA müssen Sie insbesondere dann angeben, wenn folgende Bedingungen erfüllt sind:

  • Permanente berechnete Spalten, die über Transact-SQL-Funktionen oder -Methoden entweder direkt oder indirekt auf Methoden der Assembly verweisen.

  • Spalten eines CLR-benutzerdefinierten Typs, die von der Assembly abhängen, deren Typ ein UserDefined-Serialisierungsformat (Nicht-Native) implementiert.

VorsichtshinweisVorsicht

Wird WITH UNCHECKED DATA nicht angegeben, versucht SQL Server, die Ausführung von ALTER ASSEMBLY zu verhindern, wenn die neue Assemblyversion Auswirkungen auf vorhandene Daten in Tabellen, Indizes oder andere permanente Sites hat. SQL Server garantiert jedoch nicht, dass berechnete Spalten, Indizes, indizierte Sichten oder Ausdrücke mit den zugrunde liegenden Routinen und Typen konsistent sein werden, wenn die CLR-Assembly aktualisiert wird. Gehen Sie beim Ausführen von ALTER ASSEMBLY mit Vorsicht vor, um sicherzustellen, dass es keine fehlende Übereinstimmung zwischen dem Ergebnis eines Ausdrucks und einem auf diesem Ausdruck basierenden Wert, der in der Assembly gespeichert ist, gibt.

Nur Mitglieder der festen Datenbankrollen db_owner und db_ddlowner können "run ALTER ASSEMBLY" mit der WITH UNCHECKED DATA-Klausel ausführen.

SQL Server schreibt eine Meldung in das Windows-Anwendungsereignisprotokoll, die besagt, dass die Assembly geändert wurde und ungeprüfte Daten in den Tabellen vorhanden sind. SQL Server markiert dann alle Tabellen, die Daten enthalten, die von dem Assembly abhängen, als ungeprüfte Daten. Die Spalte has_unchecked_assembly_data der sys.tables-Katalogsicht enthält für Tabellen mit nicht überprüften Daten den Wert 1 und den Wert 0 für Tabellen ohne nicht überprüfte Daten.

Um die Integrität der nicht überprüften Daten aufzulösen, müssen Sie für jede Tabelle mit nicht überprüften Daten DBCC CHECKTABLE ausführen. Falls DBCC CHECKTABLE fehlerhaft verläuft, müssen Sie entweder die ungültigen Tabellenzeilen löschen oder den Assemblycode ändern, um die Probleme zu beseitigen, und dann eine weitere ALTER ASSEMBLY-Anweisung ausgeben.

ALTER ASSEMBLY ändert die Assemblyversion. Das Culture- und das öffentliche Schlüsseltoken der Assembly bleiben unverändert. In SQL Server ist es nicht zulässig, verschiedene Versionen einer Assembly mit demselben Namen, öffentlichen Schlüssel oder derselben Kultur zu registrieren.

Interaktionen mit der für den gesamten Computer geltenden Richtlinie zur Versionsbindung

Wenn in SQL Server gespeicherte Verweise auf Assemblys mit der Herausgeberrichtlinie oder einer für den gesamten Computer geltenden Administratorrichtlinie an spezifische Versionen umgeleitet werden, müssen Sie eine der folgenden Maßnahmen ergreifen:

  • Stellen Sie sicher, dass sich die neue Version, auf die umgeleitet wird, in der Datenbank befindet.

  • Ändern Sie alle Anweisungen der externen Richtliniendatei des Computers oder der Herausgeberrichtlinie, damit diese auf die in der Datenbank vorhandene Version verweisen.

Anderenfalls verursacht das Laden einer neuen Assemblyversion in die SQL Server-Instanz einen Fehler.

Aktualisieren der Version einer Assembly