Freigeben über


ALTER ASSEMBLY (Transact-SQL)

Ändert eine Assembly durch Ändern der SQL Server-Katalogeigenschaften der Assembly. Mit ALTER ASSEMBLY wird eine Aktualisierung auf die letzte Kopie der Microsoft .NET Framework-Module ausgeführt, in denen die Implementierung der Assembly enthalten ist, und die ihr zugeordneten Dateien werden hinzugefügt oder entfernt. Assemblys werden mithilfe von CREATE ASSEMBLY erstellt.

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Syntax

ALTER ASSEMBLY assembly_name
    [ FROM <client_assembly_specifier> | <assembly_bits> ]
    [ WITH <assembly_option> [ ,...n ] ]
    [ DROP FILE { file_name [ ,...n ] | ALL } ]
    [ ADD FILE FROM 
    { 
                client_file_specifier [ AS file_name ] 
      | file_bits AS file_name 
    } [,...n ] 
    ] [ ; ]
<client_assembly_specifier> :: = 
        '\\computer_name\share-name\[path\]manifest_file_name'
  | '[local_path\]manifest_file_name' 

<assembly_bits> :: =
    { varbinary_literal | varbinary_expression }

<assembly_option> :: =
    PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE } 
  | VISIBILITY = { ON | OFF }
  | UNCHECKED DATA

Argumente

  • assembly_name
    Der Name der Assembly, die Sie ändern möchten. assembly_name muss bereits in der Datenbank vorhanden sein.

  • FROM <client_assembly_specifier> | <assembly_bits>
    Aktualisiert eine Assembly auf die letzte Kopie der .NET Framework-Module, die ihre Implementierung enthalten. Diese Option kann nur verwendet werden, wenn der angegebenen Assembly keine Dateien zugeordnet sind.

    <client_assembly_specifier> gibt den Netzwerk- oder lokalen Speicherort der zu aktualisierenden Assembly an. Der Netzwerkspeicherort enthält den Computernamen, den Freigabenamen und einen Pfad innerhalb dieser Freigabe. manifest_file_name gibt den Namen der Datei an, die das Manifest oder die Assembly enthält.

    <assembly_bits> ist der Binärwert für die Assembly.

    Es müssen separate ALTER ASSEMBLY-Anweisungen für alle abhängigen Assemblys ausgegeben werden, die ebenfalls aktualisiert werden müssen.

    HinweisHinweis

    Diese Option ist in einer enthaltenen Datenbank nicht verfügbar.

  • PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
    Gibt die Eigenschaft für den .NET Framework-Codezugriff-Berechtigungssatz der Assembly an. Weitere Informationen zu dieser Eigenschaft finden Sie unter CREATE ASSEMBLY (Transact-SQL).

    HinweisHinweis

    Die Optionen EXTERNAL_ACCESS und UNSAFE sind in einer enthaltenen Datenbank nicht verfügbar.

  • VISIBILITY = { ON | OFF }
    Gibt an, ob die Assembly zum Erstellen von CLR-Funktionen (Common Language Runtime), gespeicherten Prozeduren, Triggern, benutzerdefinierten Typen und benutzerdefinierten Aggregatfunktionen für die Assembly sichtbar ist. Falls der Wert auf OFF festgelegt ist, soll die Assembly nur von anderen Assemblys aufgerufen werden. Falls bereits vorhandene CLR-Datenbankobjekte für die Assembly erstellt wurden, kann die Sichtbarkeit der Assembly nicht geändert werden. Alle Assemblys, auf die durch assembly_name verwiesen wird, werden standardmäßig als nicht sichtbar hochgeladen.

  • UNCHECKED DATA
    Standardmäßig erzeugt ALTER ASSEMBLY einen Fehler, wenn die Konsistenz einzelner Tabellenzeilen überprüft werden muss. Diese Option ermöglicht es, die Überprüfungen mithilfe von DBCC CHECKTABLE auf einen späteren Zeitpunkt zu verschieben. Falls angegeben, wird die ALTER ASSEMBLY-Anweisung auch dann von SQL Server ausgeführt, wenn sich Tabellen in der Datenbank befinden, die Folgendes enthalten:

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

    • CHECK-Einschränkungen, die direkt oder indirekt auf Methoden in der Assembly verweisen.

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

    • Spalten eines CLR-benutzerdefinierten Typs, die auf mithilfe von WITH SCHEMABINDING erstellte Sichten verweisen.

    Falls CHECK-Einschränkungen vorhanden sind, werden sie deaktiviert und als nicht vertrauenswürdig gekennzeichnet. Alle Tabellen, die von der Assembly abhängige Spalten enthalten, werden so gekennzeichnet, dass sie nicht überprüfte Daten enthalten. Dies wird erst nach einer expliziten Überprüfung dieser Tabellen geändert.

    Nur Mitglieder der festen Datenbankrolle db_owner und db_ddlowner können diese Option angeben.

    Weitere Informationen finden Sie unter Implementieren von Assemblys.

  • [ DROP FILE { file_name[ ,...n] | ALL } ]
    Entfernt den dieser Assembly zugeordneten Dateinamen oder alle dieser Assembly zugeordneten Dateien aus der Datenbank. Falls gefolgt von ADD FILE, wird zuerst DROP FILE ausgeführt. Dadurch können Sie eine Datei mit demselben Dateinamen ersetzen.

    HinweisHinweis

    Diese Option ist in einer enthaltenen Datenbank nicht verfügbar.

  • [ ADD FILE FROM { client_file_specifier [ AS file_name] | file_bitsAS file_name}
    Lädt eine der Assembly zuzuordnende Datei, z. B. Quellcode, Debugdateien oder andere zugehörige Informationen, auf den Server hoch, wobei diese Datei in der sys.assembly_files-Katalogsicht angezeigt wird. client_file_specifier gibt den Speicherort an, von dem die Datei hochgeladen werden soll. file_bits kann stattdessen verwendet werden, um die Liste der Binärwerte anzugeben, aus denen die Datei besteht. file_name gibt den Namen an, unter dem die Datei in der Instanz von SQL Server gespeichert werden soll. file_name muss angegeben werden, wenn file_bits angegeben ist. Die Angabe ist optional, wenn client_file_specifier angegeben ist. Falls file_name nicht angegeben ist, wird der "file_name"-Teil von client_file_specifier als file_name verwendet.

    HinweisHinweis

    Diese Option ist in einer enthaltenen Datenbank nicht verfügbar.

Hinweise

Mit ALTER ASSEMBLY werden zurzeit ausgeführte Sitzungen, die Code in der zu ändernden Assembly ausführen, nicht unterbrochen. Die Ausführung wird von den aktuellen Sitzungen abgeschlossen, indem die nicht geänderten Bits der Assembly verwendet werden.

Ist die FROM-Klausel angegeben, aktualisiert ALTER ASSEMBLY die Assembly in Bezug auf die letzten Kopien der bereitgestellten Module. Da CLR-Funktionen, gespeicherte Prozeduren, Trigger, Datentypen und benutzerdefinierte Aggregatfunktionen in der Instanz von SQL Server vorhanden sein können, die bereits für die Assembly definiert wurden, bindet ALTER ASSEMBLY diese Elemente erneut an die neueste Implementierung der Assembly. Für diese Neubindung müssen die Methoden, die den CLR-Funktionen, gespeicherten Prozeduren und Triggern zugeordnet sind, in der geänderten Assembly mit denselben Signaturen vorhanden sein. Die Klassen, die CLR-benutzerdefinierte Typen und benutzerdefinierte Aggregatfunktionen implementieren, müssen weiterhin die Anforderungen für den benutzerdefinierten Typ oder das benutzerdefinierte Aggregat erfüllen.

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 anderen persistenten Sites hat. SQL Server stellt jedoch nicht sicher, 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.

Mit ALTER ASSEMBLY wird die Assemblyversion geändert. Das Token für Sprachraum und öffentlichen Schlüssel der Assembly wird nicht geändert.

Mit der ALTER ASSEMBLY-Anweisung kann Folgendes nicht geändert werden:

  • Die Signaturen von CLR-Funktionen, Aggregatfunktionen, gespeicherten Prozeduren und Triggern in einer Instanz von SQL Server, die auf die Assembly verweisen. ALTER ASSEMBLY erzeugt einen Fehler, wenn SQL Server die .NET Framework-Datenbankobjekte in SQL Server nicht erneut mit der neuen Version der Assembly binden kann.

  • Die Signaturen von Methoden in der Assembly, die von anderen Assemblys aufgerufen werden.

  • Die Liste der von der Assembly abhängigen Assemblys, auf die in der DependentList-Eigenschaft der Assembly verwiesen wird.

  • Die Indizierbarkeit einer Methode, es sei denn, es hängen keine Indizes oder persistenten berechneten Spalten direkt oder indirekt von dieser Methode ab.

  • Das FillRow-Methodennamenattribut für CLR-Tabellenwertfunktionen.

  • Die Accumulate- und Terminate-Methodensignatur für benutzerdefinierte Aggregate.

  • Die Systemassemblys.

  • Der Assemblybesitz. Verwenden Sie stattdessen ALTER AUTHORIZATION (Transact-SQL).

Darüber hinaus kann für Assemblys, die benutzerdefinierte Typen implementieren, ALTER ASSEMBLY für nur folgende Änderungen verwendet werden:

  • Ändern von öffentlichen Methoden der Klasse des benutzerdefinierten Typs, solange keine Signaturen oder Attribute geändert werden.

  • Hinzufügen von neuen öffentlichen Methoden.

  • Ändern von privaten Methoden auf beliebige Weise.

Felder, die in einem systemeigenen serialisierten benutzerdefinierten Typ enthalten sind, einschließlich Datenelemente oder Basisklassen, können nicht mithilfe von ALTER ASSEMBLY geändert werden. Alle anderen Änderungen werden nicht unterstützt.

Ist ADD FILE FROM nicht angegeben, werden von ALTER ASSEMBLY alle dieser Assembly zugeordneten Dateien gelöscht.

Wird ALTER ASSEMBLY ohne die UNCHECKED-Datenklausel ausgeführt, werden Überprüfungen ausgeführt, um sicherzustellen, dass die neue Assemblyversion keine Auswirkungen auf vorhandene Tabellendaten hat. Abhängig von der Menge der zu überprüfenden Daten kann dadurch die Leistung beeinträchtigt werden.

Berechtigungen

Erfordert die ALTER-Berechtigung für die Assembly. Es gelten folgende zusätzliche Anforderungen:

  • Zum Ändern einer Assembly, deren vorhandene Berechtigung auf EXTERNAL_ACCESS festgelegt ist, muss der SQL Server-Anmeldename über die EXTERNAL ACCESS-Berechtigung auf dem Server verfügen.

  • Zum Ändern einer Assembly, deren vorhandene Berechtigung auf UNSAFE festgelegt ist, muss der Benutzer Mitglied der festen Serverrolle sysadmin sein.

  • Zum Ändern des Berechtigungssatzes für eine Assembly auf EXTERNAL_ACCESS muss der SQL Server-Anmeldename die EXTERNAL ACCESS ASSEMBLY-Berechtigung auf dem Server besitzen.

  • Zum Ändern des Berechtigungssatzes für eine Assembly auf UNSAFE muss der Benutzer Mitglied in der festen Serverrolle sysadmin sein.

  • Das Angeben von WITH UNCHECKED DATA erfordert die Mitgliedschaft in der festen Serverrolle sysadmin.

Weitere Informationen zu Assemblyberechtigungssätzen finden Sie unter Entwerfen von Assemblys.

Beispiele

A.Aktualisieren einer Assembly

Das folgende Beispiel aktualisiert die Assembly ComplexNumber auf die aktuellste Kopie der .NET Framework-Module, die ihre Implementierung enthalten.

HinweisHinweis

Die ComplexNumber-Assembly kann durch Ausführen der UserDefinedDataType-Beispielskripts erstellt werden. Weitere Informationen finden Sie unter Benutzerdefinierter Typ.

ALTER ASSEMBLY ComplexNumber

FROM 'C:\Program Files\Microsoft SQL Server\90\Tools\Samples\1033\Engine\Programmability\CLR\UserDefinedDataType\CS\ComplexNumber\obj\Debug\ComplexNumber.dll'

B.Hinzufügen einer Datei, die einer Assembly zugeordnet werden soll

Im folgenden Beispiel wird die Quellcodedatei Class1.cs hochgeladen, die der MyClass-Assembly zugeordnet werden soll. In diesem Beispiel wird davon ausgegangen, dass die MyClass-Assembly bereits in der Datenbank vorhanden ist.

ALTER ASSEMBLY MyClass 
ADD FILE FROM 'C:\MyClassProject\Class1.cs';

C.Ändern der Berechtigungen einer Assembly

Im folgenden Beispiel wird der Berechtigungssatz der ComplexNumber-Assembly von SAFE in EXTERNAL ACCESS geändert.

ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS

Siehe auch

Verweis

CREATE ASSEMBLY (Transact-SQL)

DROP ASSEMBLY (Transact-SQL)

EVENTDATA (Transact-SQL)