ALTER ASSEMBLY (Transact-SQL)

Modifica un assembly mediante la modifica delle proprietà di catalogo di SQL Server di un assembly. ALTER ASSEMBLY esegue un aggiornamento dell'assembly in base alla copia più recente dei moduli Microsoft .NET Framework che includono la relativa implementazione e aggiunge o rimuove i file a esso associati. Gli assembly vengono creati tramite l'istruzione CREATE ASSEMBLY.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • assembly_name
    Nome dell'assembly da modificare. assembly_name deve esistere nel database.

  • FROM <client_assembly_specifier> | <assembly_bits>
    Aggiorna un assembly in base alla copia più recente dei moduli .NET Framework contenenti la relativa implementazione. È possibile utilizzare questa opzione solo se non esistono file associati all'assembly specificato.

    <client_assembly_specifier> specifica la posizione di rete o locale in cui si trova l'assembly in fase di aggiornamento. Il percorso di rete include il nome del computer e della condivisione, nonché un percorso all'interno di quest'ultima. manifest_file_name specifica il nome del file contenente il manifesto dell'assembly.

    <assembly_bits> rappresenta il valore binario dell'assembly.

    È necessario utilizzare istruzioni ALTER ASSEMBLY separate per ogni assembly dipendente che inoltre richiede un aggiornamento.

    [!NOTA]

    Questa opzione non è disponibile in un database indipendente.

  • PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
    Specifica la proprietà del set di autorizzazioni per l'accesso al codice di .NET Framework per l'assembly. Per ulteriori informazioni su questa proprietà, vedere CREATE ASSEMBLY (Transact-SQL).

    [!NOTA]

    Le opzioni EXTERNAL_ACCESS e UNSAFE non sono disponibili in un database indipendente.

  • VISIBILITY = { ON | OFF }
    Specifica se l'assembly risulta visibile per la creazione in base a esso di funzioni CLR (Common Language Runtime), stored procedure, trigger, tipi definiti dall'utente e funzioni di aggregazione definite dall'utente. Se l'opzione è impostata su OFF, l'assembly verrà chiamato solo da altri assembly. Se esistono oggetti di database CLR precedentemente creati in base all'assembly, non è possibile modificare la visibilità dell'assembly. Per impostazione predefinita, gli eventuali assembly a cui assembly_name fa riferimento vengono caricati come non visibili.

  • UNCHECKED DATA
    Per impostazione predefinita, ALTER ASSEMBLY ha esito negativo se deve verificare la consistenza delle singole righe di tabella. Questa opzione consente di posticipare le verifiche a un momento successivo tramite DBCC CHECKTABLE. Se viene specificata, SQL Server esegue l'istruzione ALTER ASSEMBLY anche se nel database sono presenti tabelle contenenti quanto segue:

    • Colonne calcolate persistenti che direttamente o indirettamente fanno riferimento a metodi nell'assembly tramite funzioni o metodi Transact-SQL.

    • Vincoli CHECK che direttamente o indirettamente fanno riferimento a metodi nell'assembly.

    • Colonne di tipo CLR definito dall'utente che dipendono dall'assembly e il tipo implementa un formato di serializzazione UserDefined (non Native).

    • Colonne di tipo CLR definito dall'utente che fanno riferimento a viste create tramite WITH SCHEMABINDING.

    Se sono presenti vincoli CHECK, essi vengono disabilitati e contrassegnati come non attendibili. Le tabelle contenenti colonne che dipendono dall'assembly vengono contrassegnate come contenenti dati non controllati finché tali tabelle non vengono verificate in modo esplicito.

    Solo i membri del ruolo predefinito del database db_owner e db_ddlowner possono specificare questa opzione.

    Per ulteriori informazioni, vedere Implementazione di assembly.

  • [ DROP FILE { file_name[ ,...n] | ALL } ]
    Rimuove il nome file associato all'assembly oppure tutti i file associati all'assembly dal database. Se specificata assieme all'opzione ADD FILE (descritto di seguito), l'opzione DROP FILE viene eseguita per prima. Ciò consente di sostituire un file con lo stesso nome.

    [!NOTA]

    Questa opzione non è disponibile in un database indipendente.

  • [ ADD FILE FROM { client_file_specifier [ AS file_name] | file_bitsAS file_name}
    Carica un file da associare all'assembly, ad esempio codice sorgente, file di debug o altre informazioni correlate, nel server e da visualizzare nella vista del catalogo sys.assembly_files. client_file_specifier specifica la posizione dalla quale caricare il file. È possibile utilizzare file_bits in alternativa per specificare l'elenco di valori binari che compongono il file. file_name specifica il nome in base al quale il file deve essere archiviato nell'istanza di SQL Server. È necessario specificare file_name se viene specificato file_bits, ma è facoltativo se si specifica client_file_specifier. Se file_name viene omesso, la parte file_name di client_file_specifier viene utilizzata come file_name.

    [!NOTA]

    Questa opzione non è disponibile in un database indipendente.

Osservazioni

ALTER ASSEMBLY non interferisce con le sessioni in esecuzione che eseguono codice nell'assembly in fase di modifica. Le sessioni correnti completano l'esecuzione tramite l'utilizzo dei bit non modificati dell'assembly.

Se si specifica la clausola FROM, ALTER ASSEMBLY aggiorna l'assembly in base alle copie più recenti dei moduli specificati. Poiché nell'istanza di SQL Server potrebbero essere presenti funzioni CLR, stored procedure, trigger, tipi di dati e funzioni di aggregazione definite dall'utente già definiti in base all'assembly, l'istruzione ALTER ASSEMBLY riassocia questi elementi all'implementazione più recente dell'assembly. Per eseguire questa riassociazione, è necessario che i metodi che eseguono il mapping alle funzioni CLR, alle stored procedure e ai trigger esistano nell'assembly modificati con le stesse firme. Le classi che implementano i tipi CLR definiti dall'utente e le funzioni di aggregazione definite dall'utente devono continuare a soddisfare i requisiti richiesti per i tipi e le funzioni di aggregazione definiti dall'utente.

Nota di attenzioneAttenzione

Se non è specificata la clausola WITH UNCHECKED DATA, SQL Server tenta di impedire l'esecuzione di ALTER ASSEMBLY nel caso in cui la nuova versione dell'assembly influisca sui dati esistenti in tabelle, indici o altre posizioni persistenti. SQL Server non garantisce tuttavia la consistenza di colonne calcolate, indici, viste indicizzate o espressioni con i tipi e le routine sottostanti in caso di aggiornamento dell'assembly CLR. Quando si esegue ALTER ASSEMBLY è pertanto necessario verificare che non siano presenti discrepanze tra il risultato di una determinata espressione e i valori basati su tale espressione archiviati nell'assembly.

L'istruzione ALTER ASSEMBLY modifica la versione dell'assembly. Il token relativo alla lingua e alla chiave pubblica dell'assembly rimane invariato.

L'istruzione ALTER ASSEMBLY non può essere utilizzata per modificare:

  • Le firme di funzioni CLR, funzioni di aggregazione, stored procedure e trigger in un'istanza di SQL Server che fa riferimento all'assembly. L'istruzione ALTER ASSEMBLY ha esito negativo se SQL Server non è in grado di riassociare gli oggetti di database di .NET Framework in SQL Server con la nuova versione dell'assembly.

  • Le firme dei metodi nell'assembly chiamati da altri assembly.

  • L'elenco di assembly che dipendono dall'assembly come specificato nella proprietà DependentList dell'assembly.

  • L'indicizzabilità di un metodo a meno che non esista alcun indice o colonna calcolata persistente che dipende da tale metodo, direttamente o indirettamente.

  • L'attributo del nome di metodo FillRow per le funzioni CLR con valori di tabella.

  • Le firme dei metodi Accumulate e Terminate per le funzioni di aggregazione definite dall'utente.

  • Gli assembly di sistema.

  • La proprietà degli assembly. Utilizzare ALTER AUTHORIZATION (Transact-SQL) in alternativa.

Per gli assembly che implementano tipi definiti dall'utente, inoltre, è possibile utilizzare ALTER ASSEMBLY per apportare soltanto le modifiche seguenti:

  • Modifica di metodi pubblici della classe di un tipo definito dall'utente, a condizione che non vengano modificati attributi o firme.

  • Aggiunta di nuovi metodi pubblici.

  • Modifica di metodi privati.

I campi contenuti in un tipo definito dall'utente con serializzazione nativa, inclusi i membri dei dati o le classi base, non possono essere modificati mediante ALTER ASSEMBLY. Tutte le altre modifiche non sono supportate.

Se si omette ADD FILE FROM, ALTER ASSEMBLY elimina i file associati all'assembly.

Se l'istruzione ALTER ASSEMBLY viene eseguita senza la clausola di dati UNCHECKED, vengono eseguite le verifiche per controllare che la nuova versione dell'assembly non abbia un impatto negativo sui dati delle tabelle. Le prestazioni potrebbero dipendere dalla quantità di dati che devono essere sottoposti a verifica.

Autorizzazioni

È necessaria l'autorizzazione ALTER per l'assembly. È inoltre necessario disporre dei requisiti seguenti:

  • Per modificare un assembly il cui set di autorizzazioni esistente è EXTERNAL_ACCESS, l'account di accesso di SQL Server deve disporre dell'autorizzazione EXTERNAL ACCESS per il server.

  • Per modificare un assembly il cui set di autorizzazioni esistente è UNSAFE, è richiesta l'appartenenza al ruolo predefinito del server sysadmin.

  • Per modificare il set di autorizzazioni di un assembly e impostarlo su EXTERNAL_ACCESS, l'account di accesso di SQL Server deve disporre dell'autorizzazione EXTERNAL ACCESS ASSEMBLY per il server.

  • Per modificare il set di autorizzazioni di un assembly e impostarlo su UNSAFE, è richiesta l'appartenenza al ruolo predefinito del server sysadmin.

  • Per specificare WITH UNCHECKED DATA, è richiesta l'appartenenza al ruolo predefinito del server sysadmin.

Per ulteriori informazioni sui set di autorizzazioni degli assembly, vedere Progettazione di assembly.

Esempi

A.Aggiornamento di un assembly

Nell'esempio seguente l'assembly ComplexNumber viene aggiornato in base alla copia più recente dei moduli .NET Framework contenenti la relativa implementazione.

[!NOTA]

Per creare l'assembly ComplexNumber, eseguire gli script di esempio UserDefinedDataType. Per ulteriori informazioni, vedere Tipo definito dall'utente.

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.Aggiunta di un file da associare a un assembly

Nell'esempio seguente viene caricato il file del codice sorgente Class1.cs da associare all'assembly MyClass. In questo esempio si presuppone che l'assembly MyClass sia già stato creato nel database.

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

C.Modifica delle autorizzazioni di un assembly

Nell'esempio seguente il set di autorizzazioni dell'assembly ComplexNumber viene modificato da SAFE a EXTERNAL ACCESS.

ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS

Vedere anche

Riferimento

CREATE ASSEMBLY (Transact-SQL)

DROP ASSEMBLY (Transact-SQL)

EVENTDATA (Transact-SQL)