Implementazione di assembly
In questo argomento vengono fornite informazioni sull'implementazione e l'utilizzo degli assembly nei database, suddivise nelle sezioni seguenti:
Creazione di assembly
Modifica di assembly
Eliminazione, disattivazione e attivazione di assembly
Gestione delle versioni degli assembly
Creazione di assembly
Gli assembly vengono creati in SQL Server utilizzando l'istruzione Transact-SQL CREATE ASSEMBLY, oppure in SQL Server Management Studio utilizzando l'editor di assembly assistito. Con la distribuzione di un progetto SQL Server in Microsoft Visual Studio viene inoltre registrato un assembly nel database specificato per il progetto. Per ulteriori informazioni, vedere Distribuzione di oggetti di database CLR.
Per creare un assembly utilizzando Transact-SQL
Per creare un assembly utilizzando SQL Server Management Studio
Modifica di assembly
Gli assembly vengono modificati in SQL Server utilizzando l'istruzione Transact-SQL ALTER ASSEMBLY, oppure in SQL Server Management Studio utilizzando l'editor di assembly assistito. È possibile modificare un assembly quando si desidera allo scopo di:
Modificare l'implementazione dell'assembly caricando una versione più recente del file binario dell'assembly. Per ulteriori informazioni, vedere la sezione Gestione delle versioni degli assembly di seguito in questo argomento.
Modificare il set di autorizzazioni dell'assembly. Per ulteriori informazioni, vedere Progettazione di assembly.
Modificare la visibilità dell'assembly. Agli assembly visibili è possibile fare riferimento in SQL Server. Gli assembly non visibili non sono disponibili, anche se sono stati caricati nel database. Per impostazione predefinita, gli assembly caricati in un'istanza di SQL Server sono visibili.
Aggiungere o eliminare un file di debug o di origine associato all'assembly.
Per modificare un assembly utilizzando Transact-SQL
Per modificare un assembly utilizzando SQL Server Management Studio
Eliminazione, disattivazione e attivazione di assembly
Per eliminare gli assembly, utilizzare l'istruzione Transact-SQL DROP ASSEMBLY oppure SQL Server Management Studio.
Per eliminare un assembly utilizzando Transact-SQL
Per eliminare un assembly utilizzando SQL Server Management Studio
Per impostazione predefinita, l'esecuzione di tutti gli assembly creati in SQL Server è disattivata. Per attivare o disattivare l'esecuzione degli assembly caricati in SQL Server è possibile utilizzare l'opzione clr enabled della stored procedure di sistema sp_configure. La disattivazione dell'esecuzione degli assembly impedisce l'esecuzione di funzioni CRL (Common Language Runtime), stored procedure, trigger, funzioni di aggregazione e tipi definiti dall'utente e interrompe le funzioni attualmente in esecuzione. La disattivazione dell'esecuzione degli assembly non ne impedisce la creazione, la modifica o l'eliminazione. Per ulteriori informazioni, vedere Opzione clr enabled.
Per attivare e disattivare l'esecuzione degli assembly
Gestione delle versioni degli assembly
Quando si carica un assembly in un'istanza di SQL Server, l'assembly viene archiviato e gestito all'interno dei cataloghi di sistema del database. Le eventuali modifiche apportate alla definizione dell'assembly in Microsoft .NET Framework vanno propagate all'assembly archiviato nel catalogo del database.
Quando si modifica un assembly, è necessario eseguire un'istruzione ALTER ASSEMBLY per aggiornare l'assembly nel database. In questo modo l'assembly verrà aggiornato in base alla copia più recente dei moduli .NET Framework che ne contengono l'implementazione.
La clausola WITH UNCHECKED DATA dell'istruzione ALTER ASSEMBLY richiede a SQL Server di eseguire anche l'aggiornamento degli assembly dai quali dipendono i dati persistenti del database. In particolare, è necessario specificare WITH UNCHECKED DATA nei seguenti casi:
Se esistono colonne calcolate persistenti che fanno riferimento a metodi nell'assembly, direttamente o indirettamente, mediante funzioni o metodi Transact-SQL.
Se esistono colonne di un tipo CLR definito dall'utente che dipendono dall'assembly e il tipo implementa un formato di serializzazione UserDefined (non nativo).
![]() |
---|
Se non è specificata la clausola WITH UNCHECKED DATA, SQL Server tenta di impedire l'esecuzione dell'istruzione ALTER ASSEMBLY nel caso in cui la nuova versione dell'assembly modifichi i dati esistenti in tabelle, indici o altre posizioni persistenti. SQL Server non garantisce tuttavia che le colonne calcolate, gli indici, le viste indicizzate o le espressioni saranno consistenti con i tipi e le routine sottostanti in caso di aggiornamento dell'assembly CLR. Quando si esegue l'istruzione ALTER ASSEMBLY è pertanto necessario verificare che non vi siano discrepanze tra il risultato di una determinata espressione e il valore basato su tale espressione archiviato nell'assembly. |
Solo i membri dei ruoli predefiniti del database db_owner e db_ddlowner possono eseguire ALTER ASSEMBLY utilizzando la clausola WITH UNCHECKED DATA.
SQL Server invia al registro eventi applicazioni di Windows il messaggio che l'assembly è stato modificato con dati non controllati nelle tabelle. SQL Server contrassegna quindi le tabelle con dati dipendenti dall'assembly indicando che contengono dati non controllati. La colonna has_unchecked_assembly_data della vista del catalogo sys.tables contiene il valore 1 per le tabelle che contengono data non controllati e il valore 0 per le tabelle che non ne contengono.
Per verificare l'integrità dei dati non controllati, eseguire DBCC CHECKTABLE su tutte le tabelle contenenti dati non controllati. Se DBCC CHECKTABLE ha esito negativo è necessario eliminare le righe non valide della tabella oppure modificare il codice dell'assembly per risolvere i problemi e quindi eseguire altre istruzioni ALTER ASSEMBLY.
ALTER ASSEMBLY modifica la versione dell'assembly. La lingua e il token di chiave pubblica dell'assembly restano invariati. SQL Server non consente la registrazione di versioni diverse di un assembly con lo stesso nome, lingua e chiave pubblica.
Interazioni con i criteri del computer per l'associazione delle versioni
Se i riferimenti agli assembly archiviati in SQL Server vengono reindirizzati a versioni specifiche utilizzando i criteri del computer forniti dall'editore o dall'amministratore, è necessario eseguire una delle operazioni seguenti:
Verificare che la nuova versione alla quale viene eseguito il reindirizzamento si trovi nel database.
Modificare qualsiasi istruzione nei file di criteri esterni del computer o nei criteri editore per assicurarsi che facciano riferimento alla specifica versione presente nel database.
In caso contrario, il tentativo di caricare una nuova versione dell'assembly nell'istanza di SQL Server avrà esito negativo.
Per aggiornare la versione di un assembly
Vedere anche