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 zu ändernden Assembly. assembly_name muss in der Datenbank bereits 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 network Netzwerkspeicherort umfasst den Computernamen, den Freigabenamen und einen Pfad innerhalb der Freigabe. manifest_file_name gibt den Namen der Datei an, die das Manifest der 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.

  • 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).

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

    • Permanente 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.

  • [ ADD FILE FROM { client_file_specifier [ AS file_name] | file_bitsAS file_name}
    Führt einen Upload einer der Assembly zuzuordnenden Datei, z. B. Quellcode, Debugdateien oder andere verbundene Informationen, auf den Server aus, 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 anstelle dessen 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 für file_name verwendet.

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 permanenten 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 permanenten 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 User-Defined Type (UDT) Sample.

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